_ID と AUDIO_ID の違い ( _ID と AUDIO_ID 列の違いは何ですか? ) を知った後、代わりに AUDIO_ID を使用するようにクエリを変更していますが、ここで問題が発生しました。
これは、外部ストレージ内のすべてのオーディオ ファイルをクエリし、AUDIO_ID が埋め込まれた各ファイルの「Music」インスタンスを作成することを意図した私のコード スニペットです。
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cur = mContentResolver.query(uri, null,
MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);
int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int idColumn = cur.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID);
// All of the above columns return the right integers,
// except idColumn which returns -1 thus making my further code below throws an exception
do{
Music music = new Music(); // it's my music class
music.setArtist( cur.getString(artistColumn) );
music.setTitle( cur.getString(titleColumn) );
music.setId( cur.getLong(idColumn) ); // error here, because idColumn = -1 (column not found)
// ......
} while (cur.moveToNext())
AUDIO_ID
クエリ時に列を取得できないのはなぜMediaStore.Audio.Media.EXTERNAL_CONTENT_URI
ですか? それを取り戻す方法はありますか?(任意の回避策を歓迎します)
ここの回答コメントで説明されているように、アプリにはオーディオファイルへの絶対参照が必要なので、必要です-> https://stackoverflow.com/a/17648131/670623
ありがとう :)
編集
私が探しているものに近い解決策の質問を見つけました(AUDIO_IDを取得できます)が、特定のプレイリストからすべてのオーディオファイルをリストすることを目的としています。私の懸念は、どのプレイリストからのものかに関係なく、メディアストア全体に AUDIO_ID を照会することです。