2013-08-16 65 views
2

我最近得到了更新到Android 4.3和股票視頻相機開始行事有點奇怪,每當我從我的應用程序開始與意圖。Android相機視頻意圖返回null URI

起初它只會崩潰,並說「圖庫停止響應」。一段時間後,我能夠錄製視頻,但點擊完成返回了一個空的URI到我的應用程序,這使它崩潰了!

所以我開始測試使用相同代碼的2.3.4設備。視頻應用程序返回了我可以在該設備上使用的正確URI。相同的代碼在得到4.3之前工作得很好(有4.2.2的Galaxy Nexus股票)

這是一個活動,它從4.3的股票相機應用獲得空URI,但在4.2.2和更少的設備上工作正常。

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button pick = (Button) findViewById(R.id.button1); 
    pick.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
      startActivityForResult(takeVideoIntent, 123); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode == RESULT_OK){ 
     if(requestCode == 123){ 
      VideoView videoView = (VideoView) findViewById(R.id.videoView1); 
      videoView.setVideoURI(data.getData()); 
      Log.d("Video", "URI "+data.getData()); 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 
} 

我該怎麼做纔會發生這種情況?這是否意味着這將與不同製造商設備上的其他相機應用程序有所不同?

回答

3

我解決了這個問題,通過改變視頻意圖是這樣的:

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
String fName = "VideoFileName.mp4"; 
File f = new File(fName); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
startActivityForResult(intent, CAMERA_VIDEO_REQUEST); 

而在活動結果我得到的視頻文件路徑如下:

File f = new File(Environment.getExternalStorageDirectory().toString()); 
for (File temp : f.listFiles()) { 
    if (temp.getName().equals("VideoFileName.mp4")) { 
     f = temp; 
     break; 
    } 
} 
//f is the video file... 
-2

在Android 4.3上,已引入權限。你需要以這種方式啓動一個Intent。看到這個帖子更改:Android 4.3 behaviors

您需要啓動意圖在Android OS 4.3開始是這樣的:

Intent intent = new Intent(Intent.MediaStore.ACTION_VIDEO_CAPTURE); 
... 
if (intent.resolveActivity(getPackageManager()) != null) { 
    startActivity(intent); 
} else { 
    Toast.makeText(context, R.string.app_not_available, Toast.LENGTH_LONG).show(); 
} 

您還需要添加android:restrictedAccountType標籤在你的清單文件:

<application ... 
    android:restrictedAccountType="com.example.account.type" > 

閱讀this

+0

沒有,仍然返回在我的設備上的空URI。 – akshaybhasme

+0

@akshaybhasme請看我編輯的帖子,並閱讀提供的鏈接瞭解詳細的見解。 –

+1

我嘗試了Play商店中的Camera ICS應用程序。該應用程序返回一個適當的URI。我開始考慮如果這是4.3股票安卓相機應用程序中的錯誤! – akshaybhasme

1

這可能是在相機應用程序中的錯誤,我解決它通過檢索最後一次拍攝的視頻:

Uri getLastPhotoOrVideo(Context context) { 
    String[] columns = { MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DATE_ADDED }; 

    ContentResolver cr = context.getContentResolver(); 
    Cursor cursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, columns, null, null, 
      MediaStore.MediaColumns.DATE_ADDED + " DESC"); 

    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    String path = cursor.getString(columnIndex); 

    cursor.close(); 

    return Uri.fromFile(new File(path)); 
}