您的位置:首页 > 其它

设置手机铃声

2016-03-08 15:54 337 查看
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);
}
}


整理自教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: