質問

SDCardのファイルにインデックスを付けたいMP3アプリケーションに取り組んでいます。それを行うための最良の方法は何ですか?

私の考え. 。アプリケーションが初めて開始されたときにファイルを検索し、SDCARD状態の変更意図のブロードキャストレシーバーを登録し、意図がブロードキャストされるたびにファイルを検索します。

しかし、この場合、ブロードキャストのレシーバーが10秒以内に戻ってこない場合、ANRが表示されます。

より良いものと失敗のアイデアを探しています。ありがとう。

役に立ちましたか?

解決

Chrisに同意して、MediaScannerはあなたのために音楽を見つけ、MediaStoreデータベースに住んでいます。音楽エントリを検索するためのコードは次のとおりです。

        final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        final String[] cursor_cols = {
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.ARTIST,
                MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.TITLE,
        };
        final String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
        final Cursor cursor = getContentResolver().query(uri, cursor_cols, where, null, null);
        cursor.moveToNext();
        final String artist = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
        final String album = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
        final String track = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
        doSomethingInteresting(artist, album, track);

「データ」フィールドには、Mediaplayerで使用できるハンドルが含まれています。

他のヒント

ANRを回避するには、UIスレッドの外で検索を行う必要があります。 SDカードは大きくなる可能性があるため、検索が進行中にユーザーが他のものにデバイスを使用できるように、フォアグラウンドアクティビティではなくサービスでそれを行う必要があります。

しかし、Androidはすでにサポートされているメディアファイルを見つけてインデックスしているため、組み込みのMediaScannerのものを活用できるかどうかを確認する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top