Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开摄像头录制视频';我不能在安卓6和7中工作_Java_Android_Android Studio - Fatal编程技术网

Java 打开摄像头录制视频';我不能在安卓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

我正在尝试在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;
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
知道它。