2010-12-06 13 views
1

私はSDCardのファイルをインデックスに登録するMP3アプリケーションを開発中です。それを行う最善の方法は何ですか?SDCardのAndroidファイルを見つける

マイ・アイデアアプリケーションが初めて起動されたときにファイルを検索し、SDCard状態変更インテント用のブロードキャストレシーバを登録し、インテントがブロードキャストされるたびにファイルを検索します。

しかし、この場合、放送受信機が10秒以内に戻らなければANRが表示されます。

優れたフェイルセーフのアイデアを探しています。ありがとう。

答えて

2

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で使用できるハンドルが含まれています。

+0

すばらしい答えです。ありがとう。 –

2

ANRを回避するには、UIスレッドの外部で検索する必要があります。 SDカードは大きくなる可能性があるため、ユーザーはフォアグラウンドではなくサービスで行い、検索が進行中のときにユーザーが他のものを使用できるようにしたいと考えています。

しかし、アンドロイドはすでにサポートされているメディアファイルを見つけてインデックスを作成していますので、内蔵のMediaScannerの機能を活用できるかどうかを確認する必要があります。

+0

初めて、AsyncTaskを使用してスキャンしますが、後でインテントが受信されると、サービスを使用して行います。 –

+1

初めてサービスを利用しないのはなぜですか? –

関連する問題