13

バックグラウンド

ユーザーが新しい画像をダウンロードするか、カメラを使用してキャプチャすると、ギャラリー アプリが更新されて新しい画像が表示されます。

ギャラリーアプリが示すように、作成方法(カメラ、ブラウザなど)に関係なく、新しい画像が作成されるとすぐに通知を受ける必要があります。

問題

すべての種類のメディア ファイルのスキャンを担当する mediaScanner Android コンポーネントがあり、それが終了すると、インテント " MEDIA_SCANNER_FINISHED " を送信することになっています (この例に示すように)。

そこで、ユーザーがカメラ アプリから写真を撮るたびにトーストが表示されることを期待して、次のコードを追加しました。

マニフェスト:

    ...
    <receiver android:name="com.example.newgalleryimagereceivertest.MediaScannerBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_SCANNER_FINISHED" />
            <data android:scheme="file" />
        </intent-filter>
    </receiver>
    ...

Java ファイル:

package com.example.newgalleryimagereceivertest;
...
public class MediaScannerBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        android.util.Log.d("AppLog", "gallery has new images");
    }

何らかの理由で、このコードは機能しません...

質問

コードの何が問題になっていますか?

写真を撮った後、broadcastReceiver が呼び出されることはありますか?

それを行う正しい方法は何ですか?

本当に contentObserver を使用してその変更を監視し (このようなものを使用して)、このためだけにアプリを実行し続ける必要がありますか? 私は本当にそうではないことを願っています...

4

3 に答える 3

3

これらもフィルターに追加することを検討することをお勧めします。

com.android.camera.NEW_PICTURE
com.android.camera.NEW_VIDEO
android.hardware.action.NEW_PICTURE
android.hardware.action.NEW_VIDEO

android.hardware.x アクションは「公式」の現在のブロードキャストですが、com.android.x アクションは Samsung デバイスと古いバージョンの Android によって送信されます。

于 2015-03-13T21:59:57.453 に答える
1

FileObserverを使用してこれを実現できると思います 。

ドキュメントに記載されているように:

デバイス上のプロセスによってファイルがアクセスまたは変更された後に、ファイルを監視してイベントを発生させます。各 FileObserver インスタンスは、単一のファイルまたはディレクトリを監視します。ディレクトリが監視されている場合、監視されているディレクトリ内のすべてのファイルとサブディレクトリに対してイベントがトリガーされます。

ただし、次のことに注意してください。

FileObserver がガベージ コレクションされると、イベントの送信が停止します。イベントを確実に受信し続けるには、他のライブ オブジェクトから FileObserver インスタンスへの参照を維持する必要があります。

フィードバックをお願いします。それが役立つことを願っています。

于 2014-01-30T06:41:43.820 に答える