如何在 Android 6.0 Marshmallow 中访问相机?
How to Access Camera in Android 6.0 Marshmallow?
我是 Android 6.0 编码的新手,请提供以下代码的解决方案:
当我提供 运行 像 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
这样的时间权限时,它会显示像
这样的异常
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.motorola.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/MyAppNew%20File%20Upload/IMG_20160401_110234.jpg} (has extras) } from ProcessRecord{ed96564 26955:com.social.nocializer/u0a259} (pid=26955, uid=10259) with revoked permission android.permission.CAMERA
MediaStore.ACTION_IMAGE_CAPTURE
和 MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE
运行 时间权限无效...
注意:READ_EXTERNAL_STORAGE
打开图库时的作品
您必须为此管理 运行 时间权限,因为您在 AndroidManifest 中定义的任何权限都不会自动授予。所以像下面的方法你可以检查你的权限是否被批准
if (checkSelfPermission(Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA},
MY_REQUEST_CODE);
}
这里,MY_REQUEST_CODE是一个你可以定义的静态常量,它会在requestPermission对话框回调中再次使用。现在,您将需要对话结果的回调:
@Override
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_REQUEST__CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Now user should be able to use camera
}
else {
// Your app will not have this permission. Turn off all functions
// that require this permission or it will force close like your
// original question
}
}
}
@Ronak 解决方案对我有用,但有一些以下更改,因为我们只需要检查那些高于 Android M.
的设备
if( ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},
5);
}
}
并使用crl+o复制覆盖下面的方法,粘贴可能会出错:D
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 5) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Now user should be able to use camera
}
else {
// Your app will not have this permission. Turn off all functions
// that require this permission or it will force close like your
// original question
}
}
我是 Android 6.0 编码的新手,请提供以下代码的解决方案:
当我提供 运行 像 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
这样的时间权限时,它会显示像
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.motorola.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/MyAppNew%20File%20Upload/IMG_20160401_110234.jpg} (has extras) } from ProcessRecord{ed96564 26955:com.social.nocializer/u0a259} (pid=26955, uid=10259) with revoked permission android.permission.CAMERA
MediaStore.ACTION_IMAGE_CAPTURE
和 MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE
运行 时间权限无效...
注意:READ_EXTERNAL_STORAGE
打开图库时的作品
您必须为此管理 运行 时间权限,因为您在 AndroidManifest 中定义的任何权限都不会自动授予。所以像下面的方法你可以检查你的权限是否被批准
if (checkSelfPermission(Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA},
MY_REQUEST_CODE);
}
这里,MY_REQUEST_CODE是一个你可以定义的静态常量,它会在requestPermission对话框回调中再次使用。现在,您将需要对话结果的回调:
@Override
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_REQUEST__CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Now user should be able to use camera
}
else {
// Your app will not have this permission. Turn off all functions
// that require this permission or it will force close like your
// original question
}
}
}
@Ronak 解决方案对我有用,但有一些以下更改,因为我们只需要检查那些高于 Android M.
的设备 if( ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},
5);
}
}
并使用crl+o复制覆盖下面的方法,粘贴可能会出错:D
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 5) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Now user should be able to use camera
}
else {
// Your app will not have this permission. Turn off all functions
// that require this permission or it will force close like your
// original question
}
}