如何在 Android 6.0 Marshmallow 中访问相机?
Posted
技术标签:
【中文标题】如何在 Android 6.0 Marshmallow 中访问相机?【英文标题】:How to Access Camera in Android 6.0 Marshmallow? 【发布时间】:2016-07-20 20:02:51 【问题描述】:我是 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(有附加功能)来自 ProcessRecorded96564 26955:com.social.nocializer/u0a259 (pid=26955, uid=10259 ) 撤销权限 android.permission.CAMERA
MediaStore.ACTION_IMAGE_CAPTURE
和 MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE
运行时权限都不起作用...
注意:READ_EXTERNAL_STORAGE
在打开画廊时使用
【问题讨论】:
请检查并执行。 developer.android.com/training/permissions/requesting.html 感谢老兄,它提供了有关 android 6.0 中运行时权限的详细概念 【参考方案1】:您必须为此管理运行时权限,因为您在 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 Joshi .. 谢谢。你拯救了我的一天 @Ronak Joshi 如何在我的活动中覆盖 onRequestPermissionResult ??? 您可以在覆盖其他方法时轻松覆盖。但它只会在 API 级别大于 23(Android 6.0 Marshmallow)时调用。 @KJEjava48 @KJEjava48 要在 Android Studio 中覆盖onRequestPermissionResult()
,请按 CTRL+O(或 Alt+Insert -> 覆盖方法... ) 并双击onRequestPermissionResult()
。【参考方案2】:
@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 Marshmallow 中访问相机?的主要内容,如果未能解决你的问题,请参考以下文章
在Android 6.0 中使用lockNow 后如何保留指纹解锁?
如何在 Android 6.0 (API 23) 中继续使用浏览器书签更改
如何使用 Appium 自动接受警报 -- 权限 Android 6.0