AndroidでMediaScannerにACTION_MEDIA_SCANNER_SCAN_FILEを投げてもACTION_MEDIA_SCANNER_FINISHEDを投げ返してくれないのですが(^^);
BroadcastRecieverでMediaScannerConnection.scanFile()を呼べないので、MediaScannerサービスにブロードキャストでメディアスキャンをリクエストした。
スキャン完了次第、Intent.ACTION_MEDIA_SCANNER_FINISHEDがブロードキャストされるだろうと思ってこんなBroadcastReceiverクラスを書く。
さらに、このクラスを使えるようにするために、AndroidManifest.xmlにこのような定義を追加した。(「file」のdataスキームを追加することがポイント)
で、どうなるか?
メディアスキャンはされる。LogCatを見ているとスキャンされている様子がわかる。
しかし、完了通知が返ってこない(^^);
書き方がマズイのか?と思ってSDカードを抜き差ししてみると、この時はMEDIA_SCANNER_FINISHEDのブロードキャストを受信できた。
ということは、MEDIA_SCANNER_FINISHEDのブロードキャストは、SDカードをマウントした時にしか飛んでこないということ?
こうなったら、MediaScannerConnection.scanFile()だけをする新しいIntentServiceを作って、BroadcastRecieverからそこにインテントを投げるしか無いか・・・
追記13.01.28:結局こうなった
琴線探査: Androidのダウンロードマネージャで画像をダウンロードして完了を通知し、その通知をタップしたらその画像をギャラリーで開くには?
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
スキャン完了次第、Intent.ACTION_MEDIA_SCANNER_FINISHEDがブロードキャストされるだろうと思ってこんなBroadcastReceiverクラスを書く。
public class MediaScannerBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) { Log.v(getTag(), "メディアスキャナー終了"); } } // END onReceive() } // END class
さらに、このクラスを使えるようにするために、AndroidManifest.xmlにこのような定義を追加した。(「file」のdataスキームを追加することがポイント)
<!-- メディアスキャナーからのブロードキャストインテントを受信するレシーバ --> <receiver android:name=".MediaScannerBroadcastReceiver" > <intent-filter> <data android:scheme="file" /> <action android:name="android.intent.action.MEDIA_SCANNER_FINISHED" /> </intent-filter> </receiver>
で、どうなるか?
メディアスキャンはされる。LogCatを見ているとスキャンされている様子がわかる。
しかし、完了通知が返ってこない(^^);
書き方がマズイのか?と思ってSDカードを抜き差ししてみると、この時はMEDIA_SCANNER_FINISHEDのブロードキャストを受信できた。
ということは、MEDIA_SCANNER_FINISHEDのブロードキャストは、SDカードをマウントした時にしか飛んでこないということ?
こうなったら、MediaScannerConnection.scanFile()だけをする新しいIntentServiceを作って、BroadcastRecieverからそこにインテントを投げるしか無いか・・・
追記13.01.28:結局こうなった
琴線探査: Androidのダウンロードマネージャで画像をダウンロードして完了を通知し、その通知をタップしたらその画像をギャラリーで開くには?
コメント
コメントを投稿