2017-05-23 1 views
0

FileObserver을 사용하여 휴대 전화의 Screenshot 디렉토리에 시계를 보관하려고하고 있는데 모든 이벤트를 시도했지만 어떤 이벤트에서도 onEvent 아이디가 호출되지 않았습니다. 내가 한 것은 앱을 설치 한 후 한 개의 스크린 샷을 찍었지만 메소드가 호출되지 않았습니다. 파일 선택기와 선택한 카메라 폴더를 통해 디렉토리를 변경하려고 시도했지만 사진 한 장을 찍었으니 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 인스턴스에 대한 참조를 유지해야합니다.

FileObserveronClick()이 반환 된 직후 가비지 수집 할 수 있습니다. 활동 분야와 같이 다른 곳에 붙들어 야합니다.

그 외에도 par을보고 값이 예상 한 값인지 확인하는 것이 좋습니다.

+0

어떻게 그렇게 할 수 있습니까? –