0

私は音楽ファイルを検索しています

proj = new String[] {[...],
                    MediaStore.Audio.Media.DATA
                    };
Cursor musiccursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, MediaStore.Audio.Media.IS_MUSIC + "=1", null, null);

[...]

int ixdata      = musiccursor.getColumnIndex(MediaStore.Audio.Media.DATA);

[...]

while(musiccursor.moveToNext()) {
  [...]
  String data     = musiccursor.getString(ixdata);

/mnt/sdcard のファイルではすべて問題なく動作しますが、残念ながら /mnt/USB のファイルではデータが空のようです。

さらに悪いことに、メディアプレーヤーは /mnt/sdcard 内のファイルのコンテンツ URI (つまり、content://media/external/audio/media/120) では機能しますが、/mnt/USB 内のファイルのコンテンツ URI では機能しません。 (つまり、content://media/external/audio/media/530)。

ファイルは問題ありません。メディア プレーヤーに /mnt/USB/testfile.mp3 への絶対パスを指定すると、問題なく再生できます。

さらに奇妙なことに、USB ドライブ上のファイルから、アルバム、アーティスト、タイトルなどを問題なく読み取ることができます。

誰かアイデア?

ありがとう

4

1 に答える 1

0

まったく同じ質問を自問しましたが、メディアストアに空のデータの行が含まれている理由を見つけることができませんでした。私が思いついたのは、空のデータ フィールドを持つアイテムを選択しない (空のデータ ソースをフィルタリングする) ことによって、メディアストアへのクエリに「where 句」を追加することです。

Cursor cursor = managedQuery(
  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
  MY_COLUMNS, 
  MediaStore.Audio.Media.DATA + "<> ''",
  null,
  SORT_ORDER);

どこ

  • MY_COLUMNS は、列の名前を含む String[] です
  • SORT_ORDER は私のソート順オプションです
于 2012-07-13T15:53:48.403 に答える