2011-11-09 39 views
4

我以編程方式打開相機拍攝視頻。我告訴相機把視頻文件使用類似下面的代碼指定地點:摩托羅拉Android 2.2相機忽略EXTRA_OUTPUT參數

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
File out = new File("/sdcard/camera.mp4"); 
Uri uri = Uri.fromFile(out); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
startActivityForResult(intent, GlobalUtility.CAMERA_VIDEO); 

它運作良好,一個HTC的手機上。但是在我的摩托車上,它只是忽略了MediaStore.EXTRA_OUTPUT參數,並將視頻放在默認位置。 於是我使用onActivityResult()函數的代碼來解決這個問題:

private String getRealPathFromURI(Uri contentUri) { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

String realPath; 
try { 
    File file = new File("/sdcard/camera.mp4"); 
    if (!file.exists()) { 
     Uri videoUri = data.getData(); 
     realPath = getRealPathFromURI(videoUri); 
    } 
} catch (Exception ex) { 
    Uri videoUri = data.getData(); 
    realPath = getRealPathFromURI(videoUri); 
} 

希望這將幫助一些人。

+1

thankx爲info..tell我Environment.getExternalStorageDirectory()沒有爲你工作insted的傳遞靜態路徑如/ sdcard? – MKJParekh

+1

這不是一個SD卡問題。如果我拍攝一張照片而不是視頻,「/sdcard/camera.png」在違抗方面效果很好。 –

回答

0

只因爲/sdcard/是一個手機的SD卡目錄,Android的一個版本並不意味着將保持一致。

正如Frankenstein的評論所暗示的那樣,您會希望使用Environment.getExternalStorageDirectory()。這將始終工作以獲得SD卡的目錄。

由於手機可能處於USB存儲模式,您還需要檢查SD卡是否可以安裝。

試着像...

if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
    Log.d(TAG, "No SDCARD"); 
} else { 
    File out = new File(Environment.getExternalStorageDirectory()+File.separator+"camera.mp4");  
} 
0

我已經做了這種方式,仍然沒有沒有發現任何error..so請儘量將你「摩托以身試法」這樣我就可以知道的現實。

要呼叫意圖:

Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(intent,2323); 

在活動的結果:

Uri contentUri = data.getData(); 
String[] proj = { MediaStore.Images.Media.DATA }; 
Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
cursor.moveToFirst(); 
String tmppath = cursor.getString(column_index); 

videoView.setVideoPath(path);