Android实现音乐播放 Music 详解

简介:

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.
         * <p>
         * 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.
         * <p>
         * 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源码



猜你喜欢

转载自blog.csdn.net/qq_33495943/article/details/78330426
今日推荐