用于视频录制的意图会出错

时间:2012-10-23 17:02:53

标签: android camera

我想录制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。 并且视频以正确的名称保存在我指定的路径上。 请帮帮我。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
}