2014-02-15 2 views
0

Я хочу запустить приложение для камеры, чтобы получить фотографию, но когда я нажимаю кнопку ok, приложение камеры все еще находится на переднем плане, и моя активность не может возобновиться.Приложение камеры не возвращается в мою деятельность

Вот что я делаю:

File file = new File(getFilesDir() + File.separator + UUID.randomUUID().toString() + ".jpg"); 
    try { 
     file.createNewFile(); 
    } catch (IOException e) { 
     Toast.makeText(this, R.string.problem_creating_file, Toast.LENGTH_LONG).show(); 
     return; 
    } 
    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
    takePhotoIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivityForResult(takePhotoIntent, REQUEST_CODE_PHOTO); 

И в манифесте:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

Я нашел много решений в Интернете, но никто не работал для меня :(

+0

Вы можете разместить свой код onActivityResult()? –

+0

OnActivityResult() никогда не вызывается, потому что приложение никогда не возобновляется. –

+0

@ DanieleVitali: какой режим запуска вы выбрали для Activity, из которого вы вызываете startActivityForResult? –

ответ

1

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

  • съемки
  • хранящего изображение на вашем запрошенное месте
  • немедленно возвращаются в приложение после того, как снимок сделан

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

Следовательно, вы и ваше приложение не должны делать никаких предположений о том, что делает стороннее приложение, когда вы попросите его сделать снимок. В частности, вам необходимо знать, что пользователю может потребоваться нажать BACK, чтобы покинуть приложение камеры и вернуться к вашему, в зависимости от реализации выбранного пользователем приложения для камеры. И вполне возможно, что приложение с багги-камерой даже не почитает кнопку BACK, и в этом случае пользователю нужно выбрать лучшее приложение для камеры.

+0

Звучит как «никогда не использовать приложение для камеры по умолчанию» :) Тем не менее, я использую два устройства для тестирования. Один из них - Nexus 5. Считаете ли вы, что у Nexus 5 может быть плохое приложение для камеры? –

+0

@ DanieleVitali: «Похоже, никогда не использовать приложение для камеры по умолчанию» - вы не используете приложение камеры по умолчанию. Вы используете любое приложение камеры, которое пользователь выбирает для использования. Если пользователь не установил приложение сторонней камеры, предлагающее 'ACTION_IMAGE_CAPTURE', то вы будете использовать предустановленное приложение камеры. Но есть много сторонних приложений и множество пользователей, которые их используют. – CommonsWare

+2

@ DanieleVitali: «Как вы думаете, даже у Nexus 5 может быть приложение для камеры с ошибкой?» - с точки зрения авторов, это может быть не багги, это просто не может вести себя так, как вы ожидаете. Опять же, очень мало документировано о том, что даже предполагается * для таких вещей, не говоря уже о каком-либо принудительном исполнении. Это одна из причин, почему я пишу библиотеку CWAC-Camera, чтобы облегчить работу камеры в приложении, в зависимости от стороннего приложения. – CommonsWare

0

Удалить это ...

takePhotoIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
+0

Еще одна проблема :( –

0

Если вам просто нужен снимок, и ни один из странных эффектов, с которыми камера не может написать, вы можете написать класс камеры для использования в своем приложении, чтобы вы могли контролировать его функциональность.

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