【问题标题】:startActivityForResult running intent.ACTION_VIDEO_CAPTURE causing a "stop failed" errorstartActivityForResult 运行 intent.ACTION_VIDEO_CAPTURE 导致“停止失败”错误
【发布时间】:2015-08-25 14:09:42
【问题描述】:

我创建了一个自定义列表界面。我正在使用数组适配器来管理列表视图单元格的按钮点击。我的一个按钮会打开一个对话框,其中提供了录制视频的选项。

在我的适配器getView 方法中,我有按钮的点击监听器。当我选择视频录制按钮时。摄像机意图正确打开,我可以录制一些视频,但是当我单击停止时,应用程序冻结并且摄像机屏幕刷新(这次除外,我无法单击录制)。我正在使用 Genymotion 作为模拟器。我可以按ESC退出冻结屏幕。

我的 Activity 中的 onActivityResult 方法会在按下 ESC 后被调用。

这是我在 MainActivityListAdapter 中调用 startActivityForResult 的方法:

video.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            File mediaFile = new
                    File(Environment.getExternalStorageDirectory().getAbsolutePath()
                    + "/myvideo.mp4");

            Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            fileUri = Uri.fromFile(mediaFile);
            Globals shared = Globals.getInstance();
            shared.setValue(qid);
            shared.setFile_path(fileUri);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            ((Activity) context).startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
            dialog.dismiss();
        } // end method onClick
    }); // end setOnClickListener

我正在为我的文件路径和其他我需要的参数使用全局变量,因为onActivityResult 中的 data.getData() 返回一个空指针异常。

这是我的onActivityResult 在我的MainActivity

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Globals shared = Globals.getInstance();
    String qid = shared.getValue();
    switch (requestCode) {
        case CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE:
            Uri selectedVideo = shared.getFile_path();
            Toast.makeText(this, "Video Path:\n" +
                    selectedVideo, Toast.LENGTH_LONG).show();
            //rest of the code hasn't been filled in yet, 
            //but this shouldn't be affecting my problem...I think
            break;
    }
}

我的 logcat 中出现以下错误:

08-25 14:49:28.239    475-30145/? E/MPEG4Writer﹕ The number of recorded samples is 0
08-25 14:49:28.239    475-30145/? W/MPEG4Writer﹕ 0-duration samples found: 1
08-25 14:49:28.239    475-30145/? W/MPEG4Writer﹕ 0-duration samples found: 1
08-25 14:49:28.239    475-30145/? I/MPEG4Writer﹕ Received total/0-length (0/0) buffers and encoded 0 frames. - Audio
08-25 14:49:28.239    475-30145/? I/MPEG4Writer﹕ Audio track drift time: 0 us
08-25 14:49:28.240    475-30126/? I/MediaCodecSource﹕ encoder (audio) stopped
08-25 14:49:28.240      475-901/? I/MediaCodecSource﹕ puller (audio) stopping
08-25 14:49:28.283    475-30139/? I/NuPlayerDecoder﹕ [OMX.google.vorbis.decoder] resubmitting CSD
08-25 14:49:28.283    475-30139/? I/NuPlayerDecoder﹕ [OMX.google.vorbis.decoder] resubmitting CSD
08-25 14:49:31.240    475-30133/? W/ALooperRoster﹕ failed to deliver message. Target handler 1041 registered, but object gone.
08-25 14:49:36.279    475-30132/? E/genymotion_audio﹕ get_next_buffer() pcm_read error -1
08-25 14:49:36.305      475-901/? I/MediaCodecSource﹕ puller (audio) stopped
08-25 14:49:36.305      475-901/? D/MPEG4Writer﹕ Audio track source stopped
08-25 14:49:36.305      475-901/? D/MPEG4Writer﹕ Audio track stopped
08-25 14:49:36.305      475-901/? D/MPEG4Writer﹕ Duration from tracks range is [0, 1002874] us
08-25 14:49:36.305      475-901/? D/MPEG4Writer﹕ Stopping writer thread
08-25 14:49:36.305    475-30136/? D/MPEG4Writer﹕ 0 chunks are written in the last batch
08-25 14:49:36.305      475-901/? D/MPEG4Writer﹕ Writer thread stopped
08-25 14:49:36.306      475-901/? D/MPEG4Writer﹕ Video track stopping
08-25 14:49:36.306      475-901/? D/MPEG4Writer﹕ Audio track stopping
08-25 14:49:36.307  30067-30067/? E/MediaRecorder﹕ stop failed: -1007
08-25 14:49:36.307  30067-30067/? E/CAM_VideoModule﹕ stop fail
java.lang.RuntimeException: stop failed.
        at android.media.MediaRecorder.stop(Native Method)
        at com.android.camera.VideoModule.stopVideoRecording(VideoModule.java:1461)
        at com.android.camera.VideoModule.onStopVideoRecording(VideoModule.java:657)
        at com.android.camera.VideoModule.onShutterButtonClick(VideoModule.java:699)
        at com.android.camera.ShutterButton.performClick(ShutterButton.java:158)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-25 14:49:36.307  30067-30067/? D/CAM_OrientMgrImpl﹕ unlock orientation
08-25 14:49:36.308  30067-30067/? I/CAM_VideoModule﹕ Releasing media recorder.

【问题讨论】:

  • 即兴发挥,它看起来像是 Genymotion 和任何用于处理此Intent 的应用程序组合中的错误或限制。尝试使用硬件,看看是否能得到更好的结果。
  • 在我的平板电脑上工作,感谢您的建议。不知道为什么我没有早点尝试。

标签: android android-intent video android-arrayadapter onactivityresult


【解决方案1】:

这是 Genymotion 模拟器的问题。测试时,这个问题在我的平板电脑上消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多