Android 获取内部存储中音乐文件的正确姿势

最近想写一个音乐的小APP出来(doge),借此熟悉音频开发的相关技术。但是在获取内部存储的音乐文件时踩了一些坑...所以有了这篇帖子,简单介绍下Android的存储类别,以及如何获取内部存储中的音乐文件。

首先要理解一个概念,内存≠内部存储

内存 -> 程序运行是内存中进行的,并不是用于存储数据的。

百度百科描述如下:它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。

二、内部存储是啥?

内部存储(InternalFileStorage)-> 内部存储是应用内部独有的存储,这部分存储的文件、数据,只能被应用自身访问到,其他应用都没有权限访问。

举个栗子,我下载了网易云音乐,网易云在手机存储中创建了个叫Cloudmusic的文件夹,网易云音乐的相关数据都在此文件夹下,其他应用都没得权限访问,仅仅自己进行访问。

(其实说到这里,我总能想起四大组件里面的Content Provider,懂我意思吧?使用内容提供者查询、访问其他应用程序的数据)

三、外部存储是啥?

外部存储(ExternalStorage)-> 在Android4.4以下系统,外部存储=插入手机内的SD卡(那个时候好像我还在玩天天酷跑??);在Android4.4系统及以上系统中,外部存储 = SD卡+机身存储中的外部存储。如下两图所示:

四、如何实现Android获取本地的音乐文件,以及我踩的坑。

Android 获取本地的音乐文件可以通过MediaStore的方式查询数据库得到歌曲信息。

相信大家对Android SQLite 都有所了解,我这就不过多赘述了。

Cursor cursor = null;
        try {
            cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    null, null, null, null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                musicInfo = new MusicInfo();
                //中间muicInfo是我创建的音乐文件的Bean类,
                name = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                musicInfo.setName(name);
                time = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DURATION));
                musicInfo.setTime(time);
                position = cursor.getPosition();
                musicInfo.setPosition(String.valueOf(position));
                musicInfo.setPath((UtilsFileName.getMusicFilePath(name)));
                mDatas.add(musicInfo);
                ///storage/emulated/0/9.mp3 - >
            }
            adapter.setList(mDatas); //设置新的数据源
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }

//MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 即获取内部存储中的音乐文件,如果有外部存储或者其他需求的可以更换调用的存储位置

仅是个人的一些分析和经验,希望能对有同样问题的朋友提供些许灵感,欢迎同好交流指正。

本文回头我传到公众号上(二两仙气儿),欢迎小白一起交流学习。

猜你喜欢

转载自blog.csdn.net/ezsxrtghjmk/article/details/128695621