0

我正在尝试使用以下代码从我的应用程序中打开 android 默认摄像机:

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(intent, 1);

但在我的两部手机(Samsung Note 2 和 Google Pixel)上,它会打开图像相机。我的清单中有这个权限:

<uses-permission android:name="android.permission.CAMERA"/>

任何想法是什么导致这个问题?我还在运行时请求了许可。

4

3 回答 3

0

添加关注权限 CAPTURE_SECURE_VIDEO_OUTPUT 和 CAPTURE_VIDEO_OUTPUT

于 2016-11-15T18:49:35.637 回答
-1

Android 6.0 及更高版本需要在运行时询问权限。在此处阅读官方文档:https ://developer.android.com/training/permissions/requesting.html

我希望它有所帮助。

于 2016-11-15T18:54:43.290 回答
-1

您必须添加下一个代码。设备装有 Android 6.0 或更高版本。

if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        startActivityForResult(intent, 1);
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 2);
    }

如果您的应用程序具有使用 STORAGE 的权限,我们会打开 STORAGE。

如果您的应用没有使用 STORAGE 的权限,我们会打开系统对话框。您可以在 onRequestPermissionsResult 中看到对话框的结果。(您必须在您的活动中覆盖它)。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    if (requestCode == 2) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            startActivityForResult(intent, 1);
        }
    }
}

我认为您必须提取私有方法的下一行。

private void takePhoto() {
    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    startActivityForResult(intent, 1);
}

有关更多信息,请参阅:https ://developer.android.com/training/permissions/requesting.html

于 2016-11-15T18:23:53.483 回答