获取Android媒体库中的音乐文件
2015-07-17 10:51
302 查看
获取Android媒体库中的音乐文件
差不多结束了考试周(还剩一门英语听力),坐下来静静的看代码是一件多么令人感到愉悦的事情。随心所欲,在代码的世界里尽情的遨游。
想到之前写过的一个音乐播放器还没与完善,于是就想着把代码给优化一下。因为之前写音乐播放器急于求成,加上当时对SQLite数据库很陌生,在进行音乐加载时采用的是用递归对SD卡进行全部扫描的笨力搜索导致音乐播放器在打开的时候要加载很长时间。这两天学习了数据库的操作后尝试着从媒体库中直接去取音乐文件的方法,
结果成功了。废话不多说了,看看代码才是硬道理!!
上代码:
下面来看看效果:
大小: 52.1 KB
查看图片附件
差不多结束了考试周(还剩一门英语听力),坐下来静静的看代码是一件多么令人感到愉悦的事情。随心所欲,在代码的世界里尽情的遨游。
想到之前写过的一个音乐播放器还没与完善,于是就想着把代码给优化一下。因为之前写音乐播放器急于求成,加上当时对SQLite数据库很陌生,在进行音乐加载时采用的是用递归对SD卡进行全部扫描的笨力搜索导致音乐播放器在打开的时候要加载很长时间。这两天学习了数据库的操作后尝试着从媒体库中直接去取音乐文件的方法,
结果成功了。废话不多说了,看看代码才是硬道理!!
上代码:
package com.example.testmediascanner; import java.util.Arrays; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.database.Cursor; import android.media.AudioManager; import android.os.Bundle; import android.provider.MediaStore; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { /** * 音乐的基本数据,用数组进行各个的存储 */ private int[] _ids; private int[] _album_id; private int[] durations; private String[]_titles; private String[] albums; private String[] artists; private String[] _path; /** * 提示框 */ private AlertDialog ad = null; private AlertDialog.Builder builder = null; //列表框,用来展示音乐名称 private ListView listView; //用来查询媒体库 private Cursor c; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 listView=(ListView)findViewById(R.id.listView1); //获取数据 setListData(); } /** * 从媒体库中查询音乐文件,将音乐名加载到列表框中 */ public void setListData(){ //查询数据库 c=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{ MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID }, null, null, null); //若无音乐文件,提示用户没有音乐文件 if(c==null||count==0){ builder=new Builder(this); builder.setTitle("提示"); builder.setMessage("存储列表为空。。。"); ad=builder.create(); ad.show(); } //将游标放到第一处 c.moveToFirst(); //得到媒体库中音乐的个数 int count=c.getCount(); //初始化数组 _ids=new int[count]; _album_id=new int[count]; durations=new int[count]; _titles=new String[count]; albums=new String[count]; artists=new String[count]; _path=new String[count]; //为数组赋值 for (int i = 0; i < count; i++) { _ids[i] = c.getInt(3); _album_id[i]=c.getInt(6); durations[i]=c.getInt(1); _titles[i] = c.getString(0).trim(); albums[i] = c.getString(4).trim(); artists[i] = c.getString(2).trim(); _path[i] = c.getString(5).trim(); c.moveToNext(); } // 给列表加载数据 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, _titles)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
下面来看看效果:
大小: 52.1 KB
查看图片附件
相关文章推荐
- Android GSM驱动模块(rild)详细分析
- 给Android虚拟机AVD加一个虚拟内存卡
- Android实现两个Activity界面的跳转并传值
- Android控件的一般属性
- Run Android on Your Netbook or Desktop
- android系统重启设备
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- 应用开启动画界面的实现--Android
- android include 标签的使用
- Android 记录ListView滚动的位置的三种方法及判断是否滑动到底部
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- Android studio 打jar包
- Android--混淆
- Android问题集锦
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- Android onTouch事件与手势操作
- Android中listView分组显示内容和下拉刷新
- android 获取屏幕宽高 & 控件宽高
- Android4.4 Launcher3分析之IconCache
- Android运行时ART简要介绍和学习计划