2016-06-19 28 views
0

ユーザがカメラで写真を撮るとき、どのように検出できますか?私は勤務中です。私はそれのバイトデータを取得したい。Androidは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」(Webサーバーなど)によって監視できない多くの場所が含まれます。また、 '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 /'のパスをチェックしています。しかし、これより良い方法があるはずです... –

関連する問題