[英]Can't get audio files from external storage - Android Studio
我正在按照本指南创建音频播放器: https ://www.sitepoint.com/a-step-by-step-guide-to-building-an-android-audio-player-app/。 当我尝试查找音频文件时出现问题。 创建游标后,它不为空,但使用 cursor.getCount() 结果为 0,因此未找到音频。 在手机和模拟器上都找不到音频文件。 当我在寻找解决方案时,我遇到了其他一些 contentResolver.query,但这似乎不是问题。 我在清单中使用了这个:
<uses-permission android:name="android.permission.INTERNET" />
<permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这就是查找音频文件的方法:
private void loadAudio() {
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);
boolean cursorB = cursor == null;
Log.d("aaaaaa", "uri" + uri.toString());
Log.d("aaaaaa", "cursor.getCount() " + cursor.getCount() + " " + cursorB);
if (cursor != null && cursor.getCount() > 0) {
audioList = new ArrayList<>();
while (cursor.moveToNext()) {
@SuppressLint("Range") String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
@SuppressLint("Range") String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
@SuppressLint("Range") String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
@SuppressLint("Range") String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
Log.d("aaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
// Save to audioList
audioList.add(new Audio(data, title, album, artist));
}
}
Log.d("Song", "Song:" + audioList.get(0).getTitle());
cursor.close();
}
这是可以使用的东西
@SuppressLint("Range")
可以放在方法的顶部,无需在代码行中重复cursor.getCount()
如果cursor == null
将崩溃
private final String track_id = MediaStore.Audio.Media._ID;
private final String bucket_displayname = MediaStore.Audio.Media.BUCKET_DISPLAY_NAME;
private final String track_no = MediaStore.Audio.Media.TRACK;
private final String track_name = MediaStore.Audio.Media.TITLE;
private final String artist = MediaStore.Audio.Media.ARTIST;
private final String artist_id = MediaStore.Audio.Media.ARTIST_ID;
private final String duration = MediaStore.Audio.Media.DURATION;
private final String album = MediaStore.Audio.Media.ALBUM;
private final String composer = MediaStore.Audio.Media.COMPOSER;
private final String year = MediaStore.Audio.Media.YEAR;
private String path = MediaStore.Audio.Media.DATA;
private final String date_added = MediaStore.Audio.Media.DATE_ADDED;
private final String genre = MediaStore.Audio.Media.GENRE;
private final String genre_id = MediaStore.Audio.Media.GENRE_ID;
public Cursor getAllTracks(Context context) {
// gets all tracks
if (context != null) {
ContentResolver cr = context.getContentResolver();
String[] columns =null;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q ) {
columns = new String[]{track_id, track_no, artist, track_name,
album, duration, path, year, composer, genre, genre_id};
}else{
columns = new String[]{track_id, track_no, artist, track_name,
album, duration, path, year, composer};
}
Uri uri = uris.get_audio_media_uri();
Cursor crs=cr.query(uri, columns, null, null, null);
enumerateAndrodCursor(context, crs);
return crs;
} else {
return null;
}
}
public Uri get_audio_media_uri(){
Uri uri_to_use = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
uri_to_use = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
uri_to_use = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
return uri_to_use;
}
public void enumerateAndrodCursor(Context context, @NonNull Cursor c) {
try {
if (c != null && c.moveToFirst()) {
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
// String id = c.getString(c.getColumnIndex(pampfolder_playlist_entries_id));
String strartist = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String stralbum = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String strtitle = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TRACK));
String strdisplay_name = c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String strplaylistentry = c.getString(c.getColumnIndex(MediaStore.Audio.Media._ID));
Log.i("ABC", "trackid = " + strplaylistentry+ " Artist = " + strartist + " Album = " + stralbum + " Title = " + strtitle+ " display_name ="+ strdisplay_name);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.