Намерение камеры Android никогда не возвращается в приложение

У меня очень неприятная проблема. Я использую камеру Android, чтобы запустить видеокамеру и записать видео.

Что я ожидаю: когда я нажимаю "Стоп", я хочу вернуться к активности в своих приложениях с помощью onActivityResult, чтобы сделать что-то вроде отображения большого пальца видеозаписи и т. Д.

Что происходит: когда я нажимаю "Стоп", экран мигает, как будто возвращаясь к приложению, но затем просто продолжает отображать камеру. Я поместил журнал в onActivityResult, и он никогда не перезванивает здесь! Пожалуйста, обратите внимание, что это не проблема, где данные намерения == ноль. Это проблема, когда метод никогда не вызывается вообще. Когда я заглядываю в свой каталог мультимедиа, видео-файл на самом деле там, поэтому запись действительно имела место и сохраняла файл там.

Что я делаю: я звоню в камеру с намерением щелкнуть мышью внутри своей активности:

public class MainActivity extends Activity {

  public void startVideo(){
    //set the path
    String fileName = "MyVid_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
    File externalFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), fileName);
    Uri videoUri = Uri.fromFile(externalFile)

    //setup up the video intent
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
    takeVideoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, maxStorage); //set the max file size - variable calculated elsewhere
    takeVideoIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,   Configuration.ORIENTATION_LANDSCAPE); //set the camera orientation
    takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, CamcorderProfile.QUALITY_480P); //set the camera resolution
    takeVideoIntent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true); //set the camera btns

    //start the intent
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, VIDEO_INTENT);
    }
  }

  //then i have the onActivtyResult - this part is never called, regardless of whether data is null or not
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      Log.d("***1 LOG onActivityResult - requestCode: ", String.valueOf(requestCode));
  }

}

Мои разрешения следующие:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" android:required="true" />

И моя деятельность, которая запускает намерение, объявляется в манифесте как портретное представление, хотя намерение камеры в коде установлено как ландшафтное, как показано ранее:

<activity
        android:theme="@style/AppTheme"
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
</activity>

Я делаю что-то подобное для фотографий, которое работает как шарм. Этот код также хорошо работает на эмуляторе, но при тестировании на моем устройстве (Galaxy S3) он дает такое поведение и только для видео. Я искал решение проблемы, но ничего не могу найти, любые советы, указатели или ссылки будут с благодарностью!

2 ответа

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

А в Activity не нужно вызывать super.onActivityResult(), иначе он может подавить один из фрагмента.

Я думаю, что вы сделали снимок, но не дали совет, что с ним делать. Пожалуйста, проверьте эту статью в том месте, где вы получите эскиз и следующие параметры. http://developer.android.com/training/camera/photobasics.html

Другие вопросы по тегам