一、获取存储权限
在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系统中的音频文件。这些方法可以帮助用户解锁移动音乐库中的宝藏,让音乐更加便捷地触手可及。