android音乐播放器开发教程

2025-12-29 21:18:58

1、关于音乐列表的读取,不同的音乐播放器都会有不同的方案,有的是有多重方案并用。例如说,全盘扫描音乐格式文件等。

首先我封装了一个Audio类来存储读取的音频信息:

public class MediaUtils {  

    public static final String[] AUDIO_KEYS = new String[]{  

            MediaStore.Audio.Media._ID,  

            MediaStore.Audio.Media.TITLE,  

            MediaStore.Audio.Media.TITLE_KEY,  

            MediaStore.Audio.Media.ARTIST,  

            MediaStore.Audio.Media.ARTIST_ID,  

            MediaStore.Audio.Media.ARTIST_KEY,  

            MediaStore.Audio.Media.COMPOSER,  

            MediaStore.Audio.Media.ALBUM,  

            MediaStore.Audio.Media.ALBUM_ID,  

            MediaStore.Audio.Media.ALBUM_KEY,  

            MediaStore.Audio.Media.DISPLAY_NAME,  

            MediaStore.Audio.Media.DURATION,  

            MediaStore.Audio.Media.SIZE,  

            MediaStore.Audio.Media.YEAR,  

            MediaStore.Audio.Media.TRACK,  

            MediaStore.Audio.Media.IS_RINGTONE,  

            MediaStore.Audio.Media.IS_PODCAST,  

            MediaStore.Audio.Media.IS_ALARM,  

            MediaStore.Audio.Media.IS_MUSIC,  

            MediaStore.Audio.Media.IS_NOTIFICATION,  

            MediaStore.Audio.Media.MIME_TYPE,  

            MediaStore.Audio.Media.DATA  

    };  

  

    public static List<Audio> getAudioList(Context context) {  

        List<Audio> audioList = new ArrayList<Audio>();  

  

        ContentResolver resolver = context.getContentResolver();  

        Cursor cursor = resolver.query(  

                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,  

                AUDIO_KEYS,  

                null,  

                null,  

                null);  

  

        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {  

            Bundle bundle = new Bundle ();  

            for (int i = 0; i < AUDIO_KEYS.length; i++) {  

                final String key = AUDIO_KEYS[i];  

                final int columnIndex = cursor.getColumnIndex(key);  

                final int type = cursor.getType(columnIndex);  

                switch (type) {  

                    case Cursor.FIELD_TYPE_BLOB:  

                        break;  

                    case Cursor.FIELD_TYPE_FLOAT:  

                        float floatValue = cursor.getFloat(columnIndex);  

                        bundle.putFloat(key, floatValue);  

                        break;  

                    case Cursor.FIELD_TYPE_INTEGER:  

                        int intValue = cursor.getInt(columnIndex);  

                        bundle.putInt(key, intValue);  

                        break;  

                    case Cursor.FIELD_TYPE_NULL:  

                        break;  

                    case Cursor.FIELD_TYPE_STRING:  

                        String strValue = cursor.getString(columnIndex);  

                        bundle.putString(key, strValue);  

                        break;  

2、以上类来封装音乐媒体信息,一些变量看名字也能看出来是什么,例如说title,duration此类,无非就是歌曲名称,时长之类的信息,有些变量名字单词认识,但是并不知道干什么用,其实我也不知道是什么信息,虽然打印出来过,但是并不懂到底哪里能用到,反正一股脑都读出来了先,以后再打印输出看看都是些什么。

      return isMusic;  

    }  

      

    public boolean isNotification () {  

        return isNotification;  

    }  

      

    public String getTitle () {  

        return mTitle;  

    }  

      

    public String getTitleKey () {  

        return mTitleKey;  

    }  

      

    public String getArtist () {  

        return mArtist;  

    }  

      

    public int getArtistId () {  

        return mArtistId;  

    }  

      

    public String getArtistKey () {  

        return mArtistKey;  

    }  

      

    public String getComposer () {  

        return mComposer;  

    }  

      

    public String getAlbum () {  

        return mAlbum;  

    }  

      

    public int getAlbumId () {  

        return mAlbumId;  

    }  

      

    public String getAlbumKey () {  

        return mAlbumKey;  

    }  

      

    public String getDisplayName () {  

        return mDisplayName;  

    }  

      

    public int getYear () {  

        return mYear;  

android音乐播放器开发教程

3、如此返回一个Audio的List,现在我们可以用这个List做一个列表展示。

android音乐播放器开发教程

4、Android本身有媒体库,可以读取本地媒体库的数据,来快速获知设备上的音乐。

android音乐播放器开发教程

5、在以往的Android开发中,遇到列表,都要用到RecyclerView,这是谷歌所提倡的用来代替ListView的控件。相比ListView要更灵活,自由度更大,比如在做表格分割线的时候,就比Listview好用多了。 但是在使用RecyclerView的Adapter的时候,必须返回一个ViewHolder,类似于ListView的BaseAdapter中的getView方法。而且要根据不同的ViewType返回不同的ViewHolder,才能在一个RecyclerView中显示几个样式的数据。 

android音乐播放器开发教程

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢