2013-12-17 4 views
1

Я пытаюсь отобразить захваченное изображение с помощью Glass Camera и отображать его в ImageView.Показать снятое изображение на Google Glass

Вот что я делаю прямо сейчас:

public void startCamera() 
{ 
    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(captureIntent, 100);  
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 100 && resultCode == RESULT_OK && null != data) 
    { 
     String photoPath = data.getExtras().getString("picture_file_path");   
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     bitmap = BitmapFactory.decodeFile(photoPath, options);   
     mImageView.setImageBitmap(bitmap); 
    } 
} 

Однако растровый равна нулю. При входе в photoPath это дает мне путь к файлу, как:

/mnt/sdcard/DCIM/Camera/20131216_195521_665.jpg

Любые идеи?

ответ

2

Из-за обработки, которая происходит на стекле после того, как вы сделаете снимок, файл может быть не полностью записан в то время, когда вызывается onActivityResult.

Вы должны использовать FileObserver, как описано в CameraManager javadoc, чтобы отложить обработку до тех пор, пока файл не будет готов. Для этого необходимо указать FileObserver родительский каталог данного пути для события CLOSE_WRITE в самом файле. Пример этого приведен в нижней части страницы в нашем camera developer guide.

+0

Тони спасибо за ответ. Но камера javadoc истекла. Не могли бы вы обновить ссылку? –

+0

Ссылка обновлена, и я также добавил ссылку на образец кода, который у нас есть для этой логики. –

+0

Тони для уточнения ссылки и ответов. :) –

1

Как сказал Тони Аллевато, проблема в том, что ваша программа не ждет достаточно долго, пока файл не появится. Когда я экспериментировал с этим на XE11, для файла часто требовалось 5-10 секунд для чтения в файловой системе. По какой-то причине FileObserver тоже не работал для меня, поэтому я применил таймер, а затем написал свою собственную работу.

Мы слышим, что следующий выпуск GDK сделает доступный снимок, поэтому ваша проблема может исчезнуть, как вы можете это использовать. В то же время, вы можете рассмотреть вопрос о написании собственной деятельности, чтобы сделать снимок, как я сделал здесь:

https://github.com/dazza222/GlassCameraSnapshot

Смежные вопросы