我正在关注如何使用相机意图捕获视频的Android website上的教程,但是启动时应用程序崩溃。
我不确定MEDIA_TYPE_VIDEO是否具有良好的价值。其他所有内容都与Android网站相同。
这就是我所拥有的:
public class Main extends Activity {
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
private Uri fileUri;
public static final int MEDIA_TYPE_VIDEO = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//create new Intent
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // create a file to save the video
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
// start the Video Capture Intent
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
}
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** Create a File for saving an image or video */
private static File getOutputMediaFile(int type){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
}
有谁知道问题出在哪里?
答案 0 :(得分:0)
我会把钱放在权限上......
在使用Camera API开始使用您的应用程序进行开发之前, 你应该确保你的清单有适当的声明 允许使用相机硬件和其他相关功能。
相机权限 - 您的应用程序必须请求使用权限 设备相机。
<uses-permission> android:name="android.permission.CAMERA" />
注意:如果您正在使用 相机通过意图,您的应用程序不需要请求此 允许。相机功能 - 您的应用程序还必须声明使用 相机功能,例如:
<uses-feature> android:name="android.hardware.camera" />
存储权限 - 如果您的应用程序将图像或视频保存到设备的外部存储(SD卡),则还必须在清单中指定。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
getOutputMediaFile返回null 您应该检查外部存储是否可用,并允许对其进行写入操作。
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
Android官方文档中的这段代码显示了如何检查