mainactivity
import java.io.File;
import java.io.FileFilter;
import java.util.Random;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
//SQLiteDatabase
//Cursor
//SimpleCursorAdapter
//SQliteOpenHelper
public class MainActivity extends Activity {
private Random random=new Random();
private MusicSQLiteHelper mHelper;
private File[] musics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadSdcardMusics();
//通过此对象操作数据库
mHelper=new MusicSQLiteHelper(this,"media.db", null,2);
}
/**获取/mnt/sdcard/music目录下的音乐文件*/
private void loadSdcardMusics(){
File sdcard=Environment.
getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
musics=sdcard.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isFile()&&file.getName().endsWith(".mp3");
}
});
}
private MediaPlayer mPlayer;
/**实现音乐的随机播放功能*/
public void onMusicPlay(View v){
//判断是否存在音乐
if(musics==null||musics.length==0)return;
//随机获取一个音乐文件
File m=musics[random.nextInt(musics.length)];
//获得音乐文件的路径
String path=m.getPath();
long time=System.currentTimeMillis();
//播放音乐
if(mPlayer==null){
mPlayer=new MediaPlayer();
}else{
mPlayer.reset();//重置
}
try{
mPlayer.setDataSource(path);//设置要播放的音乐路径
mPlayer.prepare();//加载音乐
mPlayer.start();//开始播放
}catch(Exception e){e.printStackTrace();}
//写或更新播放日志
onWritePlayLog(path, time);
}
private void onWritePlayLog(String path, long time) {
//判断此音乐在日志信息中是否已经存在
String sql="select * from playhistory where data=?";
Cursor c=mHelper.query(sql, new String[]{path});
if(!c.moveToFirst()){
//存储音乐播放日志信息
ContentValues values=new ContentValues();
values.put("data", path);
values.put("playdate",time);
mHelper.insert("playhistory", values);
Log.i("TAG", "log insert ok!");
}else{
sql="update playhistory set playdate=? where data=?";
mHelper.update(sql, new String[]{String.valueOf(time),path});
Log.i("TAG", "log update ok!");
}
c.close();
}
private boolean paused;
private int currentPos;
public void onMusicPause(View v){
if(mPlayer!=null&&mPlayer.isPlaying()){
mPlayer.pause();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==R.id.historyId){
startActivity(new Intent(this,PlayHistoryActivity.class));
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(mPlayer!=null){
//释放资源
mPlayer.release();
mPlayer=null;
}
}
}MusicSQLiteHelper
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* SQLiteOpenHelper 是一个可以操作SQLite数据系统
* 的一个工具类,它提供了一些方法可以直接获得
* SQLiteDatabase 对象,并通过此对象执行一些CRUD操作
* */
public class MusicSQLiteHelper extends
SQLiteOpenHelper{
public MusicSQLiteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**借助此方法向表中写入数据*/
public long insert(String table,ContentValues values){
//创建或打开数据库
SQLiteDatabase sdb=
getWritableDatabase();
//向表中写入数据
long id=sdb.insert(table, null, values);
//释放资源
sdb.close();
return id;
}
/**查询数据*/
public Cursor query(String sql,String selectionArgs[]){
SQLiteDatabase sdb=
getReadableDatabase();
return sdb.rawQuery(sql, selectionArgs);
}
/**更新数据*/
public void update(String sql,String bindArgs[]){
SQLiteDatabase sdb=
getWritableDatabase();
sdb.execSQL(sql, bindArgs);
sdb.close();
}
/**创建数据库时执行,且只执行一次,一般会在
* 此方法中创建一些表*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("TAG", "onCreate");
String sql="create table playhistory("
+ "_id integer primary key autoincrement,"
+ "data text not null,"
+ "playdate long not null)";
db.execSQL(sql);
Log.i("TAG", "table create ok!");
}
/**数据库的版本升级时,此方法会自动执行*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("TAG", "onUpgrade");
/*String sql="drop table if exists playhistory";
db.execSQL(sql);
onCreate(db);*/
}
}
PlayHistoryActivity
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class PlayHistoryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_history);
MusicSQLiteHelper mHelper=new MusicSQLiteHelper(this,"media.db", null, 2);
Cursor cursor=mHelper.query("select * from playhistory order by playdate desc", null);
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while(cursor.moveToNext()){
Map<String,Object> map=new HashMap<String, Object>();
String path=cursor.getString(cursor.getColumnIndex("data"));
long time=cursor.getLong(cursor.getColumnIndex("playdate"));
String title=path.substring(path.lastIndexOf("/")+1,path.lastIndexOf("."));
map.put("title",title);
map.put("path", path);
map.put("playdate",sdf.format(new Date(time)));
list.add(map);
}
cursor.close();
ListView lsv=(ListView) findViewById(R.id.listHistoryId);
SimpleAdapter adapter=new SimpleAdapter(this,
list,
android.R.layout.simple_list_item_2,
new String[]{"title","playdate"},
new int[]{android.R.id.text1,android.R.id.text2});
lsv.setAdapter(adapter);
}
}xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="32dp"
android:layout_marginTop="27dp"
android:src="@android:drawable/ic_media_play"
android:onClick="onMusicPlay"/>
<ImageButton
android:id="@+id/imageButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imageButton1"
android:layout_below="@+id/imageButton1"
android:layout_marginTop="29dp"
android:src="@android:drawable/ic_media_pause"
android:onClick="onMusicPause" />
</RelativeLayout>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/listHistoryId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".PlayHistoryActivity" >
</ListView>
5429

被折叠的 条评论
为什么被折叠?



