简介:

andoird实现读取手机的歌曲播放,详解读。。。。。。。记得在android6.0以上要打开存储权限问题。。。6了

一,读取手机应用music

从数据库中查询所有音乐数据

读取的数据,通过 ContentResolver 获取歌曲。

Cursor cursor = contentResolver.query(contentUri, projection, where, null, sortOrder);
那么,query() 里面的的参数是什么呢???接下来,我们往下面看

query()这个方法的源码

 public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri,            @Nullable String[] projection, @Nullable String selection,            @Nullable String[] selectionArgs, @Nullable String sortOrder) {        return query(uri, projection, selection, selectionArgs, sortOrder, null);    }


第一个 读取外部内存储的内容。

 /**             * The content:// style URI for the "primary" external storage             * volume.             */            public static final Uri EXTERNAL_CONTENT_URI =                    getContentUri("external");
通过  Media.EXTERNL_CONTENT_URL 得到。

第二个,返回列表,要查询的表内容。我们就根据自己想要的内容定义,如:

/**     * 查询返回内容     */    private String[] projection = {            Media._ID,            Media.DISPLAY_NAME,            Media.DATA,            Media.ALBUM,            Media.ARTIST,            Media.DURATION,            Media.SIZE    };

第三个呢,就是一些规则了,我也不明白是什么鬼。有大神知道的,可以指点指点

"mime_type in ('audio/mpeg','audio/x-ms-wma') and bucket_display_name <> 'audio' and is_music > 0"

第四个,筛选条件,如,我们查什么到什么之间,然后定义一下,但是在这里我们不需要,所以直接传 null

第五个,类型,为文本类型。

 /**         * Path to the file on disk.         * 

* Note that apps may not have filesystem permissions to directly access * this path. Instead of trying to open this path directly, apps should * use {@link ContentResolver#openFileDescriptor(Uri, String)} to gain * access. *

* Type: TEXT */ public static final String DATA = "_data";

到这里我们就讲解完 query() 的参数了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二,实例化

通过1的阅读,我们拿到手机内存的歌曲,那么接下来,我们写一个activity来调用。。。

绑定音频播放的实体类, MediaPlayer

直接贴上代码,文章后面有github链接,可以下载

 private RecyclerView rc_list;    private MyReclerViewAdapter myReclerViewAdapter;    private TextView start_tv, stop_tv;    private MediaPlayer mePlayer;    private final int REQUEST_CODE = 1000;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rc_list = (RecyclerView) findViewById(R.id.rc_list);        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        rc_list.setLayoutManager(layoutManager);         MusicLoader.instance(getContentResolver());            myReclerViewAdapter = new MyReclerViewAdapter(this, MusicLoader.musicList, this);            rc_list.setAdapter(myReclerViewAdapter);            //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源            mePlayer = MediaPlayer.create(MainActivity.this, Uri.parse(MusicLoader.musicList.get(0).getUrl()));    }
然后 通过 mePlayer调用start()方法播放,,,pause()方法暂停播放。

/**     * Starts or resumes playback. If playback had previously been paused,     * playback will continue from where it was paused. If playback had     * been stopped, or never started before, playback will start at the     * beginning.     *     * @throws IllegalStateException if it is called in an invalid state     */    public void start() throws IllegalStateException {        baseStart();        stayAwake(true);        _start();    }

/**     * Pauses playback. Call start() to resume.     *     * @throws IllegalStateException if the internal player engine has not been     * initialized.     */    public void pause() throws IllegalStateException {        stayAwake(false);        _pause();    }

================================================================================================================================

三,贴上效果图

是不是很简单呀,对了,接下继续。。。

四,结束。

我们想了解决更多音频播放问题,我们自己得去google学习学习。看看源码提供向外的方法。。。大神指教,小神有礼了。。。


 android 音频播放源码   : github.com源码



更多相关文章

  1. Android视频播放框架一、Vitamio
  2. NDK学习笔记(十四) 使用AVILib+window创建一个AVI视频播放器
  3. JNI综合实验一:LED点亮+IO电平读取
  4. View编程(5): 自定义View_01_ApiDemo源码研究
  5. PhoneGap0.9.5 for Android源码
  6. Android(安卓)图片的读取与写入
  7. Android中的ViewRootImpl类源码解析
  8. Android(安卓)LayoutInflater原理分析,深入理解View(一)
  9. Android(安卓)ListView标题置顶效果实现

随机推荐

  1. 分析的基础:平均和交叉的思路
  2. 确保网站性能的5个小贴士
  3. LeetCode 题解 | 1297.子串的最大出现次
  4. 像数据库一样设计你的 redux 数据结构
  5. 对比Excel学习SQL(5):分组和子查询
  6. 使用 React 实现页面过渡动画仅需四个步
  7. LeetCode 题解 | 1312. 让字符串成为回文
  8. 剑指Offer 图解 | 寻找旋转排序数组中的
  9. 我就想问一句,约么?
  10. 从 O(N) 优化到 O(logN),你的第一想法是什