内容解析器查询未在 SD 卡上找到音乐
Content Resolver Query is not finding music on sd-card
我构建了一个简单的查询来查找 Android 模拟器的 SD 卡上的音乐。我正在使用 Android Studio。我使用 adb push 在 sdcard 上放置了 3 首歌曲。但是,查询未找到音乐文件。这是 SD 卡上 Music 文件夹中文件的图像:
这是我用来执行查询的代码:
ContentResolver musicResolver = getContentResolver();
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
// Now we can iterate over the results, first checking that we have valid data:
if(musicCursor!=null && musicCursor.moveToFirst()){
// We first retrieve the column indexes for the data items that we are interested in for each song
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
// then we use these to create a new Song object and add it to the list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
allSongsPlaylist.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
musicCursor 不为空,但 musicCursor.moveToNext() returns 0.
我做错了什么?音乐文件显然在 sdcard 上,但查询看不到它们。如果我将内容 URI 更改为 INTERNAL_CONTENT_URI,查询将查找内部存储中的文件(例如压电警报),而不是我的音乐文件。
What am I doing wrong?
如果我不得不猜测,您假设 MediaStore
知道这些文件。
MediaStore
,就其本身而言,偶尔只会索引外部存储。它不知道您通过 adb
.
推送到那里的文件
对于轻量级测试,请从 Play 商店中获取一个可触发重新索引回合的应用程序。我曾经使用 this app, but apparently it does not support Android 4.4+. There are plenty of others, like this one,这可能对你有用。或者,等一天,明天再试你的测试,到时候它们可能会自动被提取。
以编程方式将文件写入外部存储的开发人员应使用 MediaScannerConnection
和 scanFile()
来获取由 MediaStore
索引的文件。
我构建了一个简单的查询来查找 Android 模拟器的 SD 卡上的音乐。我正在使用 Android Studio。我使用 adb push 在 sdcard 上放置了 3 首歌曲。但是,查询未找到音乐文件。这是 SD 卡上 Music 文件夹中文件的图像:
这是我用来执行查询的代码:
ContentResolver musicResolver = getContentResolver();
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
// Now we can iterate over the results, first checking that we have valid data:
if(musicCursor!=null && musicCursor.moveToFirst()){
// We first retrieve the column indexes for the data items that we are interested in for each song
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
// then we use these to create a new Song object and add it to the list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
allSongsPlaylist.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
musicCursor 不为空,但 musicCursor.moveToNext() returns 0.
我做错了什么?音乐文件显然在 sdcard 上,但查询看不到它们。如果我将内容 URI 更改为 INTERNAL_CONTENT_URI,查询将查找内部存储中的文件(例如压电警报),而不是我的音乐文件。
What am I doing wrong?
如果我不得不猜测,您假设 MediaStore
知道这些文件。
MediaStore
,就其本身而言,偶尔只会索引外部存储。它不知道您通过 adb
.
对于轻量级测试,请从 Play 商店中获取一个可触发重新索引回合的应用程序。我曾经使用 this app, but apparently it does not support Android 4.4+. There are plenty of others, like this one,这可能对你有用。或者,等一天,明天再试你的测试,到时候它们可能会自动被提取。
以编程方式将文件写入外部存储的开发人员应使用 MediaScannerConnection
和 scanFile()
来获取由 MediaStore
索引的文件。