2017-05-23 14 views
0

FileObserverを使用して私の電話のScreenshotディレクトリに時計を保持しようとしています。すべてのイベントを試しましたが、どのイベントでもonEventというメソッドは呼び出されません。私がしたことは、アプリをインストールした後にスクリーンショットを撮ったのですが、そのメソッドは呼び出されませんでした。ファイルチューザーと選択したカメラフォルダからディレクトリを変更しようとしても、1つの写真を撮ったが、まだonEventメソッドでは何もしなかった。これは私のコードです: MAINACTIVITY:onEvent not detect私のアプリケーション内の任意のイベント

package com.andi.shikharshah.fileobserver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import com.codekidlabs.storagechooser.StorageChooser; 

import java.io.File; 

public class MainActivity extends AppCompatActivity { 
    FileObserverr fileObserverr; 
    Button b; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final StorageChooser chooser = new StorageChooser.Builder() 
      .withActivity(MainActivity.this) 
      .allowCustomPath(true) 
      .setType(StorageChooser.DIRECTORY_CHOOSER) 
      .withFragmentManager(getSupportFragmentManager()) 
      .withMemoryBar(true) 
       .build(); 
     b = (Button) findViewById(R.id.b); 
     b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chooser.show(); 
     } 
    }); 


    chooser.setOnSelectListener(new StorageChooser.OnSelectListener() { 
     @Override 
     public void onSelect(String path) { 
      String par = path+"/Pictures/Screenshots"; 
      FileObserverr obs = new FileObserverr(par); 
      obs.startWatching(); 
     } 
    }); 
} 
} 

FILEOBSERVERCLASS:

package com.andi.shikharshah.fileobserver; 

import android.os.FileObserver; 
import android.support.annotation.Nullable; 
import android.util.Log; 

/** 
* Created by Shikhar Shah on 23-05-2017. 
*/ 

public class FileObserverr extends FileObserver 
{ 
    String aboslutePath = "path to your directory"; 

    public FileObserverr(String path) { 
    super(path,FileObserver.OPEN); 
    aboslutePath = path; 
} 

@Override 
public void onEvent(int i, @Nullable String s) { 
if(s!=null) 
{ 
Log.d("TAG","File created"); 
} 
} 
} 

答えて

1

the documentationを引用:

警告:FileObserverがガベージコレクトされた場合、それはイベントの送信を停止します。イベントを引き続き受信するには、他のライブオブジェクトからのFileObserverインスタンスへの参照を保持する必要があります。

FileObserverは、onClick()が返された直後にガベージコレクションされます。アクティビティのフィールドなど、他の場所を保持する必要があります。

それ以外では、parを見て、値が期待どおりであることを確認してください。

+0

どうすればいいですか? –

関連する問題