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);
}

これを使用すると、カメラが起動し、中央のボタンをクリックして録画を開始し、左側のボタンをクリックして停止して保存し、アプリケーションがクラッシュしました。

私は0を与えたonActivityResultにresultCodeの値を出力し、ビデオは指定されたパスに指定された名前で適切に保存されました。私を助けてください。

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 に答える