1

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

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

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

, что им делать: Я зову намерение камеры от нажатия кнопки внутри моей деятельности:

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) он дает такое поведение и только для видео. Я искал высоко и низко для решения, но не мог найти что-либо, любые советы, указатели или ссылки были бы очень благодарны !!

+0

Я нашел решение этой проблемы, перейдите по ссылке: http://stackoverflow.com/a/36640559/3819836 –

ответ

0

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

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

+0

Большое спасибо за ваш ответ. Мой код находится внутри действия MainActivity, поэтому я не вызываю его из фрагмента на этом этапе, хотя я буду игнорировать то, что вы сказали, как только я реорганизую. На этом этапе я просто пытаюсь заставить приложение работать в своей основной форме. Измените мой вопрос, чтобы отразить активность – Chris

0

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

+0

Спасибо за ответ, проблема в том, что намерение камеры никогда не обращается к onActivityResult(), поэтому я даже не могу обработать изображение в своем собственном коде! Камера просто остается открытой, и я понятия не имею, как вернуться к моему приложению, так как она никогда не возвращается к моей деятельности. – Chris

+0

Я также ищу решение. Это происходит только в некоторых устройствах. –

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