Java 打开摄像头录制视频';我不能在安卓6和7中工作
我正在尝试在Android 4、5、6和7上测试我的Android应用程序,在Android 4和5上打开摄像头录制视频的动作效果非常好,但在Android 6和7上不起作用,出现此错误后应用程序停止,我不知道我们是否有什么新东西可以在安卓6和安卓7中打开摄像头并录制视频 错误:Java 打开摄像头录制视频';我不能在安卓6和7中工作,java,android,android-studio,Java,Android,Android Studio,我正在尝试在Android 4、5、6和7上测试我的Android应用程序,在Android 4和5上打开摄像头录制视频的动作效果非常好,但在Android 6和7上不起作用,出现此错误后应用程序停止,我不知道我们是否有什么新东西可以在安卓6和安卓7中打开摄像头并录制视频 错误: java.lang.NullPointerException: file 代码: private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; p
java.lang.NullPointerException: file
代码:
private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200;
public static final int MEDIA_TYPE_VIDEO = 2;
private Uri fileUri;
private void recordVideo() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
// set video quality
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file
// name
// start the video capture Intent
startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// if the result is capturing Image
if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// video successfully recorded
// launching upload activity
launchUploadActivity(false);
} else if (resultCode == RESULT_CANCELED) {
// user cancelled recording
Toast.makeText(getApplicationContext(),
"User cancelled video recording", Toast.LENGTH_SHORT)
.show();
} else {
// failed to record video
Toast.makeText(getApplicationContext(),
"Sorry! Failed to record video", Toast.LENGTH_SHORT)
.show();
}
}
}
public Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
private static File getOutputMediaFile(int type) {
// External sdcard location
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Config.IMAGE_DIRECTORY_NAME);
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(TAG, "Oops! Failed create "
+ Config.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).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;
}
public String getPath(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
String document_id = cursor.getString(0);
document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
cursor.close();
cursor = getContentResolver().query(
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
cursor.close();
return path;
}
权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
“在安卓4和5上运行得非常好,但在安卓6和7上不起作用”--与操作系统版本一样,动作视频捕获是否起作用取决于摄像头应用程序。除此之外,什么是fileUri
?@commonware我用函数更新了帖子,当尝试启动活动打开摄像头时出现错误,什么是getOutputMediaFile(type)
正在返回?@commonware我再次抱歉,帖子是用完整函数更新的是代码的异常吗?换句话说,堆栈跟踪是指应用程序中的行,还是指摄像头应用程序中的行?如果它引用应用程序中的行,请发布完整的堆栈跟踪,并指出堆栈跟踪中的哪些行与代码中的行相对应。还要注意,您的getPath()
方法反映了反模式。不要假设Uri
有任何特定的结构,比如猜测它有冒号,或者猜测MediaStore
知道它。