ギャラリーのようなアプリを書いています。
イメージが MTP 経由でデバイスにコピーされたときに通知を受け取りたいです。
メディア スキャナの終了アクションをリッスンするブロードキャスト レシーバを登録しようとしましたが、呼び出されませんでした。AndroidManifest.xml に登録するか、Java コードに登録しようとしましたが、どちらも機能しません。
<receiver android:name="com.robin.huangwei.omnigif.content.MediaScannerReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_SCANNER_FINISHED" />
<data android:scheme="file" />
</intent-filter>
</receiver>
public class MediaScannerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("-----", "Scan finished, new item: " + intent);
}
}
または以下のようにJAVAコードを使用する
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("-----", "Scan finished, new item: " + intent);
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_FINISHED);
filter.addDataScheme("file");
registerReceiver(mReceiver, filter);
上記のいずれも機能しません。
私のコードの何が問題なのですか? 新しい画像がコピーされるたびに、ギャラリー アプリに表示されることがわかります。コンテンツ オブザーバーを使用してメディア ストア データベースを監視している可能性がありますが、これは望ましくありません。
新しいイメージが MTP 経由でデバイス ストレージに追加されたときに通知を受け取りたいだけです。メディア スキャナによって実行される必要があるメディア ストアに追加されるため、アプリがブロードキャスト インテントをキャプチャできないのはなぜですか? これでも正しくない場合は、タイトルとして投稿した答えを知りたいです。