2016-06-19 2 views
0

사용자가 카메라로 사진을 찍을 때 어떻게 감지 할 수 있습니까? 나는 운행 중이 야. 나는 그것의 바이트 데이터를 얻고 싶다.안드로이드는 FileObserver를 사용하여 카메라 캡처 이벤트를 감지합니다.

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera"; 
fileObserver = new FileObserver(path) { 
    @Override 
    public void onEvent(int event, String file) { 

     Log("File: " + file); 
    } 
}; 

fileObserver.startWatching(); 
+1

사용자가 선택한 카메라 앱은 카메라 앱이 원하는 모든 위치에 사진을 저장할 수 있습니다. 여기에는 사용자가 액세스 할 수없는 장소 (예 : 이동식 저장소, 카메라 앱의 내부 저장 공간) 또는 'FileObserver'(예 : 웹 서버)로 모니터링 할 수없는 많은 장소가 포함됩니다. 또한'FileObserver'는 프로세스가 실행 중일 때만 유용합니다. – CommonsWare

+0

정보 @CommonsWare에 감사드립니다. 사용자가 선택한 폴더를 아는 것이 가능합니까? – Lazy

+0

아니요 폴더가 아니어도됩니다. – CommonsWare

답변

1

FileObserver의 CREATE 이벤트를 시청해야합니다.

String PATH = Environment.getExternalStorageDirectory().getAbsolutePATH() + "/DCIM/Camera"; 
observer = new FileObserver(PATH) { 
    @Override 
    public void onEvent(int event, String file) { 

     //if it's not CREATE event, return 
     if(event != FileObserver.CREATE) 
      return; 

     byte[] bytes = new byte[0]; 
     String filePath = PATH + "/" + file; 

     try { 
      bytes = org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     if(bytes.length == 0) 
      return; 

     //use byte data here 
    } 
}; 
+0

카메라의 저장 경로가 항상 "DCIM/카메라"임을 보장합니까? 나는 때때로 "100ANDRO"를 보았다. 또한, 누군가이 폴더에 비디오를 다운로드하면 발견 될 것입니다 ...하지만 그것은 카메라 이벤트가 아닙니다. –

+1

아니요. 보장 할 수 없습니다. Android에는 많은 ROM이 있고 다른 경로를 사용하는 맞춤형 카메라 애플리케이션이있을 수 있습니다. 비디오 이벤트 등, 내가 아는 한 카메라 또는 외부 소스에서 오는 경우 감지 할 수있는 방법이 없습니다. – Ozgur

+0

그래, 고마워, 그게 내가 찾은거야. 방금 '/ dcim /', '/ camera /'또는 '/ 100andro /'의 경로를 확인했습니다. 이보다 더 좋은 방법이 있어야합니다 ... –