1

我想从我的 Android 应用程序录制视频。像这样

File f = new File(Environment.getExternalStorageDirectory() + "/"
            + app.getBaseName());
    if (!f.exists()) {
        f.mkdir();
    }



    filename = "Video" + lastfile() + ".mp4";

    File f1 = new File(Environment.getExternalStorageDirectory() + "/"
            + app.getBaseName(), filename);

    Uri uri = Uri.fromFile(f1);

    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
    startActivityForResult(intent, 222);

并在结果活动中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 222) {
        Log.v("log_tag", "Return to back 222" + resultCode);
        if (resultCode == RESULT_OK) {
            Log.v("log_tag", "Return to back");


        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }

        Log.v("log_tag", "Return to back fury");
    }

    finish();
    super.onActivityResult(requestCode, resultCode, data);
}

使用它,相机正在启动,然后我单击中间按钮开始录制,而不是单击左侧按钮停止并保存并且应用程序崩溃。

我在 onActivityResult 中打印了 resultCode 的值,它给了我 0。并且视频以给定的名称正确保存在给定的路径上。请帮我。

4

2 回答 2

0

如果我没有错,resultCode 0 对应于 RESULT_CANCEL 但为什么你有一个“finish();” 在 onActivityResult 的末尾?你应该删除它。

于 2012-10-23T17:28:35.883 回答
0

我找不到合适的解决方案,但我使用这个流程解决了我的问题。让我们默认将视频文件保存在任何地方并在您想要的地方制作另一个副本,您也可以在复制后删除原始文件。

像这样

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == 222) {
  if (resultCode == RESULT_OK){   
   try {
     AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r");
     FileInputStream fis = videoAsset.createInputStream();
     File f1 = new File(Environment.getExternalStorageDirectory() + "/" + app.getBaseName(), filename);
     FileOutputStream fos = new FileOutputStream(f1);

     byte[] buffer = new byte[1024];
     int length;
     while ((length = fis.read(buffer)) > 0) {
           fos.write(buffer, 0, length);
     }       
     fis.close();
     fos.close();
   } catch (IOException e) {
      // TODO: handle error
   }
  }
 }
super.onActivityResult(requestCode, resultCode, intent);
}
于 2013-01-01T07:21:55.940 回答