2011-09-01 7 views
20

Serviceを起動してFileObserverを使用するようにAndroidアプリを構成すると、監視対象のディレクトリが変更されたとき(つまりユーザーが写真を撮るとき)に他のコードが実行されます。デバッグするとき、onEventメソッドは決してトリガされません。どのようにAndroidサービスからFileObserverを実装するのですか

ここに私のサービスで持っているonStartイベントがあります。用Toast火災

public final String TAG = "DEBUG"; 
public static FileObserver observer;  

@Override 
public void onStart(Intent intent, int startid) {  
     Log.d(TAG, "onStart"); 

     final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/";  
     Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show(); 

     observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card 
      @Override 
      public void onEvent(int event, String file) { 
       //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched 
        Log.d(TAG, "File created [" + pathToWatch + file + "]"); 

        Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG);     
       //} 
      } 
     }; 
    } 

「私のサービスが...開始」しかし、私は写真を撮る場合に乾杯した後、のonEventは発火しません。これはデバッグによって決定されます。そのブレークポイントには決して打たれず、トーストは決して発動しません。

このディレクトリを参照すると、新しいイメージがそこに保存されます。

ServiceFileObserverはどのように機能しますか?

答えて

43

seeこの投稿をしてください。私は、あなたがオブザーバーをセットアップした後でobserver.startWatching()コールが見つからないと思います。

observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card 

    @Override 
    public void onEvent(int event, String file) { 
     //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched 
     Log.d(TAG, "File created [" + pathToWatch + file + "]"); 

     Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG).show(); 
     //} 
    } 
}; 
observer.startWatching(); //START OBSERVING 
+4

を選択したディレクトリの下にあるすべてのディレクトリを再帰的にある高度なFileObserverとしてオープンソースRecursiveFileObserver作用することは、それを解決したことがあるので、私は答えのためにあなたのクレジットを与えます私のサンプルコードに基づいています。私は実際にあなたが参照している投稿から私のソリューションをまとめましたが、それでも動作しませんでした。私はstartWatching()メソッドを見逃している可能性がありますが、どちらの方法でも私の解決策はこの例を使用することでした:http://www.roman10.net/?p=457 – shanabus

8

toastFileObserverは、サブディレクトリを観察していない、すなわち

Toast.makeText(getBaseContext(), file + " was saved!", toast.LENGTH_LONG).show();     
+0

確かに、回答のオーナーは既にそれを編集する必要があります.. 。 – HendraWD

3

もう一つの.show()を追加します。サブディレクトリも確認したい場合はthisの投稿をチェックしてください。

あなたは

Click to download file

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 10535638) – Trilarion

+0

リンクされたページは、スタックオーバーフローの答えです...必要はありません –

関連する問題