一、获取存储权限

在Android 6.0(API级别23)及更高版本中,应用需要动态请求权限。对于读取本地音乐文件,我们需要添加以下权限到AndroidManifest.xml中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />

对于Android 13及以上版本,权限请求更加细致,需要分别添加以下三个权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

如果您的应用只需要访问音频文件,则只需添加READ_MEDIA_AUDIO权限。

二、使用MediaScanner扫描音频文件

以下是一个使用MediaScanner扫描音频文件的示例代码:

public void scanAudioFiles(Context context) {
    MediaScannerConnection.scanFile(context, new String[]{Environment.getExternalStorageDirectory().getAbsolutePath()}, null, new MediaScannerConnection.OnScanCompletedListener() {
        @Override
        public void onScanCompleted(String path, Uri uri) {
            // 扫描完成后的回调
        }
    });
}

三、获取音频文件信息

Android系统提供了MediaStore和ContentResolver接口,我们可以通过它们获取音频文件的相关信息。

以下是一个获取音频文件信息的示例代码:

public List<Song> getAudioFiles(Context context) {
    List<Song> songs = new ArrayList<>();
    Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
    if (cursor != null) {
        while (cursor.moveToNext()) {
            Song song = new Song();
            song.setId(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)));
            song.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));
            song.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));
            song.setDuration(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
            song.setPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
            songs.add(song);
        }
        cursor.close();
    }
    return songs;
}

四、管理音频文件

在获取音频文件信息的基础上,我们可以对音频文件进行管理,如排序、删除、分享等操作。

以下是一个删除音频文件的示例代码:

public void deleteAudioFile(Context context, String filePath) {
    ContentResolver contentResolver = context.getContentResolver();
    Uri uri = Uri.fromFile(new File(filePath));
    contentResolver.delete(uri, null, null);
}

五、总结

通过以上方法,我们可以轻松地扫描、获取和管理Android系统中的音频文件。这些方法可以帮助用户解锁移动音乐库中的宝藏,让音乐更加便捷地触手可及。