2016-06-19 4 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» (например, веб-сервером). Также обратите внимание, что 'FileObserver' полезен только при запуске вашего процесса. – CommonsWare

+0

Благодарим вас за информацию @CommonsWare. Возможно ли узнать, какая папка выбрана пользователем? – Lazy

+0

Нет. Там не обязательно должна быть папка. – CommonsWare

ответ

1

Вы должны посмотреть событие CREATE в FileObserver.

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/Camera"? Иногда я видел «100ANDRO». Кроме того, если кто-то загружает видео в эту папку, он также будет обнаружен ... но это не событие камеры. –

+1

Нет, это не гарантировано. Потому что в Android есть много ПЗУ, и они могут поставляться с пользовательскими приложениями для камер, которые используют разные пути. Для видео-события и т. Д., Насколько я знаю, нет способа определить, поступает ли он от камеры или внешнего источника. – Ozgur

+0

Хорошо спасибо, вот что я нашел. Я только что прибегал к проверке пути для '/ dcim /', '/ camera /' или '/ 100andro /'. Там должен быть лучший способ, чем это, хотя ... –