设置手机铃声
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); } }
整理自教程
相关文章推荐
- python 系列之 - 多进程
- hdu2524(递推)
- 重装python idle打不开解决方案
- Java NIO系列教程(六) Selector
- Hibernate之双向一对多关系总结
- python __class__ type理解
- MIT 6.828 JOS学习笔记11 Exercise 1.8
- 网络电视精灵思路分析
- SqlProfiler的替代品-ExpressProfiler
- 刷新清缓存
- 导航栏的坑 (导航透明/导航除线/titleIView)
- WEKA简单介绍与资源汇总
- Hibernate与Jpa的关系,终于弄懂
- mongodb 集群及分片
- PHP 的YII框架中CActiveForm dropDownList联动效果
- 【web audio】web简易、可视化、音频播放器 0 0
- 定制替换Android桌面(home screen) Launcher
- 5种Java经典创建型模式详解
- matlab--TLD配置
- 断点续传功能的实现