改进音乐播放器
来源:互联网 发布:秦皇岛网络问政平台 编辑:程序博客网 时间:2024/04/30 13:45
前几天看数据库时发现Android上一个以前没发现的好东西,那就是媒体库内容提供器,通过媒体库可以获得本地所有音频、视频以及图像文件的信息。这让我想起了之前做的音乐播放器,当时就不知道该如何获取本地音乐,最后做了一个文件浏览器让用户自己在文件系统里找,用起来实在太不方便了。现在才知道原来系统已经把这部分做好了,于是打算把原来的音乐播放器重新改造一下。
1. MediaStore
MediaStore这个类是Android系统提供的一个多媒体数据库,Android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,Android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用那些封装好的接口就可以进行数据库的操作了。
要使用MediaStore首先得获得内容解析器ContentResolver,每个应用程序的上下文都有一个ContentResolver实例,可以通过Activity或者Service的Context获得:
ContentResolver contentResolver = this. getContentResolver();
获得ContentResolver后就可以通过查询方法获得一个Cursor:
cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,null,null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
这里query方法第一个参数为希望查询的内容提供器数据的URL,我用的是外部存储的媒体URL;第二个参数是限定要返回的列的,传入null将返回所有列;第三个参数就是SQL中的WHERE语句,限定要返回的行的,同样,传入null将返回所有行;第四个参数是与第三个参数配合使用的,用来替换WHERE语句中的?;第五个参数表示返回结果的排列方式,传入null或者DEFAULT_SORT_ORDER将不排序。
获得Cursor后可以用 startManagingCursor(cursor);来让活动管理Cursor的生命周期,接着就可以使用Cursor的get和move提取所需信息了,下面就是一个简单的歌曲选择对话框:
musicList = newAlertDialog.Builder(MusicPlayerActivity.this).setTitle("选择歌曲").setCursor(cursor,new OnClickListener()
{
@Override
publicvoid onClick(DialogInterface dialog,int which)
{
//TODO Auto-generated method stub
cursor.moveToPosition(which);
MSintent.putExtra("MusicName",cursor.getString(1));
startService(MSintent);
}
},cursor.getColumnName(1));
1. 确认退出
现在很多程序都有退出前提示功能,因为想在播放器退出前选择是否后台继续播放,所以自己琢磨着想做一下,一开始想在Activity的生命周期里处理,就是Activity销毁前提示,但是发现无论是Toast还是Dialog都无法阻塞当前进程,也就是说即使显示了提示信息,程序也无法停下来,还是照样退出了,最终考虑还是得捕获用户的按键事件,在帮助文档里找了半天终于发现了Activity中的onBackPressed(),该方法默认是直接调用finish()结束当前应用,通过重写该方法可以实现我们自己对返回按键的响应方式:
@Override
publicvoid onBackPressed()
{
if(isServiceRunning("com.bill.musicplayer.MusicService"))
{
exitDialog.show();
}
else
{
//再按一次退出程序
if((System.currentTimeMillis()-exitTime)> 2000)
{
Toast.makeText(getApplicationContext(),"再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
}
else
{
finish();
}
}
}
我这里的响应方式分两种,第一是退出前正在播放音乐,这时我会显示一个Dialog,让用户选择是否后台播放音乐:
exitDialog= new Dialog(this);
exitDialog.setTitle(R.string.exit);
exitDialog.setContentView(R.layout.exitdialog);
//退出且后台播放音乐
exit1Btn =(Button)exitDialog.findViewById(R.id.exit1Btn);
exit1Btn.setOnClickListener(newView.OnClickListener()
{
@Override
public voidonClick(View v)
{
// TODO Auto-generatedmethod stub
exitDialog.cancel();
finish();
}
});
//退出且停止播放音乐
exit2Btn =(Button)exitDialog.findViewById(R.id.exit2Btn);
exit2Btn.setOnClickListener(newView.OnClickListener()
{
@Override
publicvoid onClick(View v)
{
// TODO Auto-generatedmethod stub
stopService(MSintent);
exitDialog.cancel();
finish();
}
});
cancleBtn =(Button)exitDialog.findViewById(R.id.cancleBtn);
cancleBtn.setOnClickListener(newView.OnClickListener()
{
@Override
public voidonClick(View v)
{
// TODO Auto-generatedmethod stub
exitDialog.cancel();
}
});
第二种情况是退出前不再播放音乐,这是我会显示一个Toast提示再按一次会退出程序,
用的是System.currentTimeMillis()来判断两次按键间时间间隔,如果小于两秒这退出:
除了onBackPressed()外,我们还可以通过onKeyDown(intkeyCode, KeyEvent event)处理其他按键事件。
就说这么多了,这个音乐播放器还得继续改进啊。。。
- 改进音乐播放器
- android音乐播放器(改进版)
- android音乐播放器(改进版)
- android音乐播放器播放音乐卡
- Android 音乐播放 类似音乐播放器
- 开源JAVA音乐播放器YOYOPlayer1.2发布,全面改进歌词搜索
- flash音乐播放器
- 常见音乐播放器
- WEB音乐播放器
- Google 音乐播放器
- 单片机音乐播放器
- 简易音乐播放器
- 网页音乐播放器
- 音乐定时播放器
- android 音乐播放器
- 音乐播放器代码
- 音乐播放器01
- 个人音乐播放器
- 29、Failure Groups in ASM
- Android应用开发之短信窃听器(补充)
- Gridview用法大总结(牛年珍藏版)
- ASp.net 剖析三层架构
- 30、通过rman backup as copy移动数据文件
- 改进音乐播放器
- -debug -d
- 家有儿女必备的六个自保妙招
- Android智能手机 各版本区别
- Windows中VirtualBox虚拟机实现桥接方式(Bridged Adapter)
- 应收发票与销售订单关联关系
- OFBiz实体引擎开发烹调书
- OOA&D实践之路——真实案例解析OO理论与实践(三、降低风险)
- 10种排毒养颜家常食物