2016-06-19 9 views
0

Wie kann ich erkennen, wenn Benutzer ein Bild in ihrer Kamera machen? Ich renne im Dienst. Ich möchte Byte-Daten davon bekommen.Android erkennt Kamera-Capture-Ereignis mit 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

Die Kamera-App, die der Benutzer auswählt, kann das Bild speichern, wo auch immer die Kamera-App es möchte. Dies schließt viele Orte ein, auf die Sie nicht zugreifen können (z. B. Wechselspeicher, interner Speicher der Kamera-App), oder kann nicht von einem "FileObserver" (z. B. einem Webserver) überwacht werden. Beachten Sie auch, dass ein 'FileObserver' nur nützlich ist, wenn Ihr Prozess läuft. – CommonsWare

+0

Vielen Dank für Ihre Informationen @CommonsWare. Ist es möglich zu wissen, welcher Ordner vom Benutzer ausgewählt wurde? – Lazy

+0

Nein. Es muss kein Ordner vorhanden sein. – CommonsWare

Antwort

1

Sie müssen CREATE-Ereignis von FileObserver beobachten.

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

Ist der Speicherpfad der Kamera immer "DCIM/Kamera"? Ich habe manchmal "100ANDRO" gesehen. Wenn jemand ein Video in diesen Ordner herunterlädt, wird es ebenfalls erkannt ... aber das ist kein Kameraereignis. –

+1

Nein, es ist nicht garantiert. Denn in Android gibt es eine Menge ROM und sie können mit benutzerdefinierten Kamera-Anwendungen kommen, die verschiedene Pfade verwenden. Für Videoereignisse usw. gibt es meines Wissens keine Möglichkeit festzustellen, ob es von einer Kamera oder einer externen Quelle kommt. – Ozgur

+0

Ok Danke, das habe ich auch gefunden. Ich habe gerade den Pfad für '/ dcim /', '/ camera /' oder '/ 100andro /' überprüft. Es sollte aber einen besseren Weg geben als das ... –