import android.app.Activity;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.Media;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
//内容解析者
private ContentResolver cr;
//适配器
private SimpleCursorAdapter adapter;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.listView);
cr = getContentResolver();
}
//异步任务 AsyncTask
//AsyncQueryHandler 异步查询处理者。
public void getSongs3(View v){
MyAsyncQeuryHandler mAQH = new MyAsyncQeuryHandler(getContentResolver());
mAQH.startQuery(7, null, Media.EXTERNAL_CONTENT_URI, new String[]{Media._ID,Media.DISPLAY_NAME}, null, null, null);
}
private class MyAsyncQeuryHandler extends AsyncQueryHandler{
public MyAsyncQeuryHandler(ContentResolver cr) {
super(cr);
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
super.onQueryComplete(token, cookie, cursor);
if(cursor != null){
adapter = new SimpleCursorAdapter(MainActivity.this, android.R.layout.simple_list_item_1, cursor, new String[]{Media.DISPLAY_NAME}, new int[]{android.R.id.text1});
listView.setAdapter(adapter);
MainActivity.this.registerForContextMenu(listView);
}
}
}
//点击按钮,开启线程实现歌曲信息查询。
public void getSongs2(View v){
new Thread(){
public void run() {
Uri uri = Media.EXTERNAL_CONTENT_URI;
cursor = cr.query(uri, new String[]{ Media._ID,Media.DISPLAY_NAME }, null, null, null);
if(cursor != null){
mHandler.sendEmptyMessage(1);
}
};
}.start();
}
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
adapter = new SimpleCursorAdapter(MainActivity.this, android.R.layout.simple_list_item_1, cursor, new String[]{Media.DISPLAY_NAME}, new int[]{android.R.id.text1});
listView.setAdapter(adapter);
MainActivity.this.registerForContextMenu(listView);
};
};
public void getSongs(View v){
//点击按钮,查询当前手机的歌曲,并且显示到ListView中。
//内容提供者 ContentProvider.
Uri uri = Media.EXTERNAL_CONTENT_URI;
//歌曲ID,歌曲名称。
cursor = cr.query(uri, new String[]{ Media._ID,Media.DISPLAY_NAME }, null, null, null);
//遍历查看是否有获得歌曲信息。
/*if(cursor!=null){
while(cursor.moveToNext()){
Log.i("TZ", cursor.getInt(0)+","+cursor.getString(1));
}
}*/
//将cursor信息展示到ListView.
//1,将cursor遍历,得到List< Song(id,name) >
//2,适配器 SimpleCursorAdapter,处理数据源是cursor,然后将信息展示到ListView中。
if(cursor != null){
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, new String[]{Media.DISPLAY_NAME}, new int[]{android.R.id.text1});
//将适配器设置给listView.
listView.setAdapter(adapter);
//给当前的ListView增加上下文菜单。
MainActivity.this.registerForContextMenu(listView);
}
}
//重写Activity的相关方法,给上下文菜单中增加item.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add("设置来电铃声");
menu.add("显示歌曲的详情");
}
//因为上下文菜单是Activity创建的,所以其item的点击事件,也是Activity来处理。
@Override
public boolean onContextItemSelected(MenuItem item) {
String title = item.getTitle().toString();
if(title.equals("设置来电铃声")){
//获得当前长按的歌曲,然后将其设置给来电铃声。
//还必须知道当前点击的item的下标。
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo();
int itemPosition = menuInfo.position;
//将cursor跳到 itemPosition位置,然后获得当前位置的歌曲名称。
cursor.moveToPosition(itemPosition);
String songName = cursor.getString(1);
int songID = cursor.getInt(0);
//来电铃声管理者。
Uri uri = ContentUris.withAppendedId(Media.EXTERNAL_CONTENT_URI, songID);
RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, uri);
Toast.makeText(MainActivity.this, "设置铃声成功", 1).show();
//Toast.makeText(MainActivity.this, "设置"+ songName +"为来电铃声!", 0).show();
}
return super.onContextItemSelected(item);
}
}
整理自教程