Проблема с захватом изображения в Google Glass

У меня возникли проблемы с захватом изображения и его сохранением во внешнем хранилище в Google Glass. У меня есть следующий код.

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);

    String imagePath = getPhotoPath();

    _imagePath = imagePath;
    File imageFile = new File(_imagePath);

    Uri imageUri = Uri.fromFile(imageFile);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

    startActivityForResult(cameraIntent, ACTION_CAPTURE_IMAGE);    

И код для getPhotoPath()

    private String getPhotoPath(){

    String photoPath = null;

    String state = Environment.getExternalStorageState();

    if (Environment.MEDIA_MOUNTED.equals(state)) {

        long captureTime = System.currentTimeMillis();

        photoPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TOTAL_" + captureTime + ".jpg";
    }       

    return photoPath;
}

Я проверил, что _imagePath не равен нулю, но когда я пытаюсь сделать следующее в onActivityResult()

    File imageFile = new File(_imagePath);

    if(!imageFile.exists()){
    Log.d(LOG_TAG, "sendPhoto: FILE DOES NOT EXIST, imagePath=" + _imagePath);
    }

Файл не существует. Я могу убедиться, что его нет в хранилище, посмотрев в Проводнике на устройство Google Glass в Eclipse.

У меня есть разрешение WRITE_EXTERNAL_STORAGE в манифесте проекта, но что-то по-прежнему не работает.

Потенциально связанное сообщение logcat:

01-06 16:28:15.067: E/CachedFilesManager(634): Failed to change mode on file /mnt/sdcard/thumbnail_cache/t_thumb_20140106_162814_113.jpg
01-06 16:28:15.067: E/CachedFilesManager(634): java.io.IOException: Operation not permitted
01-06 16:28:15.067: E/CachedFilesManager(634):  at com.google.glass.fs.Filesystem.changeMode(Native Method)
01-06 16:28:15.067: E/CachedFilesManager(634):  at com.google.glass.util.CachedFilesManager.save(CachedFilesManager.java:433)
01-06 16:28:15.067: E/CachedFilesManager(634):  at com.google.glass.camera.CameraUtils.saveThumbnailToCachedFiles(CameraUtils.java:76)
01-06 16:28:15.067: E/CachedFilesManager(634):  at com.google.glass.camera.ApiTakePictureActivity$1.doInBackground(ApiTakePictureActivity.java:110)
01-06 16:28:15.067: E/CachedFilesManager(634):  at com.google.glass.camera.ApiTakePictureActivity$1.doInBackground(ApiTakePictureActivity.java:105)
01-06 16:28:15.067: E/CachedFilesManager(634):  at android.os.AsyncTask$2.call(AsyncTask.java:273)
01-06 16:28:15.067: E/CachedFilesManager(634):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-06 16:28:15.067: E/CachedFilesManager(634):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-06 16:28:15.067: E/CachedFilesManager(634):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-06 16:28:15.067: E/CachedFilesManager(634):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-06 16:28:15.067: E/CachedFilesManager(634):  at java.lang.Thread.run(Thread.java:856)

Есть идеи, что происходит? Запись в хранилище Glass вообще запрещена? Маловероятно, но я понятия не имею, что происходит.


person whitaay    schedule 06.01.2014    source источник
comment
Вы тестируете на эмуляторе или на железе?   -  person heLL0    schedule 07.01.2014
comment
Эмулятора нет, у меня Google Glass.   -  person whitaay    schedule 07.01.2014


Ответы (1)


Glass не поддерживает дополнительное намерение EXTRA_OUTPUT для указания пути к конечному файлу изображения. Вместо этого см. пример в Руководстве разработчика камеры GDK, чтобы увидеть как получить путь к сохраненному файлу изображения и использовать FileObserver, чтобы дождаться его записи.

person Tony Allevato    schedule 06.01.2014
comment
Спасибо за быстрый ответ. Я должен был более внимательно изучить документацию. - person whitaay; 07.01.2014