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のダウンロードマネージャで画像をダウンロードして完了を通知し、その通知をタップしたらその画像をギャラリーで開くには?
コメント
コメントを投稿