1

SDカードからすべてのmp3ファイルを一覧表示するアプリケーションを作成しようとしています。

String[] columns = new String[] {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.TITLE_KEY,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.ARTIST_ID,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.TRACK
    };

    String uristr_t = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.getPath();
    Cursor musicCursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                columns, null, null, null);

    if(musicCursor != null){
        mSongs = new ArrayList<SongInfo>( musicCursor.getCount());
        boolean isMediaFilesExist = musicCursor.moveToFirst();
                ...

SD カードにいくつかの mp3 ファイルがありますが、musicCursor.GetCount() は 0 を返します。パスが間違っていると思われます。EXTERNAL_CONTENT_URIcontent://media/external/audio/mediaとそのパスは次のとおりです。

/external/audio/media

しかし、私のSDカードのパスは次のとおりです。

 /mnt/sdcard

そして、Uri を手動で設定しようとしました:

String uriStr = "content://" + Environment.getExternalStorageDirectory().getPath();
Uri sdCardUri = Uri.parse(uriStr);
Cursor musicCursor = managedQuery(sdCardUri, columns, null, null, null);

その場合、Uri は ですcontent:///mnt/sdcardが、musicCursor は managedQuery の後で null です。uriStr の形式が正しくなく、Uri の初期化が間違っている可能性がありますか? ありがとう!

4

1 に答える 1

3

あなたのコードは正しいです。パス /external/audio/media は、実際のファイル システムのパスではなく、コンテンツ プロバイダーのパスです。カードにMP3ファイルがありますか? ファイルを表示できる音楽アプリで確認してください。そこにアクセスできない場合は、(特にエミュレーターで) インデックス作成が常に実行されないことがあります。SDカードをアンマウントして再マウントすることにより、SDにすべてのメディアの再インデックスを強制的に取得します(設定/ SDカードと電話のストレージ/ SDカードのマウント解除)。

于 2011-04-12T09:10:39.670 に答える