2012-01-27 16 views
0

ビデオをキャプチャして、デフォルトの場所以外の特定の場所にビデオを保存します。ビデオをキャプチャして、デフォルトの場所ではなく特定の場所に保存します。

私は、Media StoreにはsetOutPutFile("String Location")というメソッドがあることを知っています。 しかし、正しく動作していません。

私は多くの例を見て、実行しましたが、ビデオはデフォルトの場所にのみ保存します。誰かが私にこの問題を解決するのを手助けできますか

+1

大声ではありません。 – Shoban

+0

あなたの質問を書き直して再フォーマットしました。違いをよく見てください。完全な大文字、感嘆符、嘆願などは質問に対する良いアプローチではありません。 – Bart

+0

ちょっと小林私は叫んでいない... !! もし誰かがいるなら解決したい.. !! そうです! –

答えて

9

このような方法で行います

グローバルに宣言すること

public static final int TAKE_PICTURE=0; 

とOnActivityResultで、その後

Intent photoPickerIntent= new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
         startActivityForResult(Intent.createChooser(photoPickerIntent,"Take Video"),TAKE_VIDEO); 

このようにハンドル:権限以下

public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (resultCode == RESULT_OK) 
     { 
       if(requestCode==TAKE_VIDEO) 
      { 


       try 
       { 
        Log.e("videopath","videopath"); 
       AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r"); 
       FileInputStream fis = videoAsset.createInputStream(); 
       File root=new File(Environment.getExternalStorageDirectory(),"Directory Name"); 

        if (!root.exists()) { 
         root.mkdirs(); 
        } 

        File file; 
        file=new File(root,"android_"+System.currentTimeMillis()+".mp4"); 

       FileOutputStream fos = new FileOutputStream(file); 

       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = fis.read(buf)) > 0) { 
        fos.write(buf, 0, len); 
       }  
       fis.close(); 
       fos.close(); 
       } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      } 
     } 

使用:

<uses-permission android:name="android.permission.RECORD_VIDEO"/> 
<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
+0

こんにちは...私はあなたのコードを試しましたが、それはデフォルトの場所だけに.. ..だけビデオを保存するあなたがこの問題を解決するのに役立つ以外の解決策を見つけたら... !!ありがとう.. !! –

+0

あなたはあなたのディレクトリ名を教えましたか?そのディレクトリをチェックしてください – Abhi

+1

@VaibhavVajani何が "他の解決策"でしたか?シェアしてください。 –

0

ここでのabhiの答えは正しいですが、私は他のユーザーにとってより簡単で簡単な新しい答えを書いています。あなたはこのコード

private static final int ACTION_TAKE_VIDEO = 3; 

Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO); 

を記録したビデオは、ビデオ録画を開始します開始したい場所をクリックし、ビデオを録画あなたonCreate方法でこのコードを書いたり、ボタンをONに

onCreateメソッドの後のコードで、以下の名前がonActivityResultのメソッドをオーバーライドする必要があります。

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

    if (resultCode == RESULT_OK) 
    { 
     try 
     { 
      AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r"); 
      FileInputStream fis = videoAsset.createInputStream(); 
      File root=new File(Environment.getExternalStorageDirectory(),"/RecordVideo/"); //you can replace RecordVideo by the specific folder where you want to save the video 
      if (!root.exists()) { 
       System.out.println("No directory"); 
       root.mkdirs(); 
      } 

      File file; 
      file=new File(root,"android_"+System.currentTimeMillis()+".mp4"); 

      FileOutputStream fos = new FileOutputStream(file); 

      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = fis.read(buf)) > 0) { 
       fos.write(buf, 0, len); 
      }  
      fis.close(); 
      fos.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

「RecordVideo」を、SDカードのビデオファイルに保存する特定のフォルダに置き換えます。ここに既存のフォルダまたはディレクトリ名を使用することもできます。

ありがとうございました

1

私はここで提供されているソリューションに満足できませんでした。ここにあなたの選択したフォルダにビデオを保存する非常にシンプルなソリューションです。

private static final int REQUEST_VIDEO_CAPTURE = 300; 
private Uri videoUri; 

private void dispatchVideoIntent(){ 
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
    File outputFile = new File("your file path goes here"); 
    videoUri = Uri.fromFile(outputFile); 
    takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri); 
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK && videoUri != null) { 
      // do what you want with videoUri 
    } 
} 
関連する問題