首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >撤销权限android.permission.CAMERA

撤销权限android.permission.CAMERA
EN

Stack Overflow用户
提问于 2017-03-27 09:31:47
回答 5查看 40K关注 0票数 28

我得到了错误revoked permission android.permission.CAMERA

我在舱单上使用了相机许可

代码语言:javascript
运行
复制
private void dispatchTakePictureIntent(int actionCode) {

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    switch (actionCode) {
        case ACTION_TAKE_PHOTO_B:
            File f = null;

            try {
                f = setUpPhotoFile();
                mCurrentPhotoPath = f.getAbsolutePath();
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
            } catch (IOException e) {
                e.printStackTrace();
                f = null;
                mCurrentPhotoPath = null;
            }
            break;

        default:
            break;
    } // switch

    startActivityForResult(takePictureIntent, actionCode);
}

这样的错误:

代码语言:javascript
运行
复制
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.mobile.lunatique.photo, PID: 3590
                  java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera2/com.android.camera.CaptureActivity clip={text/uri-list U:file:///KTP_42342.jpg} (has extras) } from ProcessRecord{2fbbd91 3590:com.mobile.lunatique.photo/u0a60} (pid=3590, uid=10060) with revoked permission android.permission.CAMERA
                      at android.os.Parcel.readException(Parcel.java:1599)
                      at android.os.Parcel.readException(Parcel.java:1552)
                      at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
                      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
                      at android.app.Activity.startActivityForResult(Activity.java:3917)
                      at android.app.Activity.startActivityForResult(Activity.java:3877)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842)
                      at com.mobile.lunatique.photo.MainActivity.dispatchTakePictureIntent(MainActivity.java:254)
                      at com.mobile.lunatique.photo.MainActivity.access$000(MainActivity.java:33)
                      at com.mobile.lunatique.photo.MainActivity$1.onClick(MainActivity.java:321)
                      at android.view.View.performClick(View.java:5198)
                      at android.view.View$PerformClick.run(View.java:21147)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I/Process: Sending signal. PID: 3590 SIG: 9

谁能帮我??

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-08-23 18:54:10

我就是这样解决这个问题的。

与大多数答案相反,把这个从你的清单文件中删除。

代码语言:javascript
运行
复制
 <uses-permission android:name="android.permission.CAMERA"/>

为什么?

启动Android (API 23),如果您的应用程序在清单中声明了相机权限,则需要授予该相机权限才能访问ACTION_IMAGE_CAPTURE等.也是(这通常不需要他们自己的相机许可)。如果没有,则会自动引发SecurityException。

代码语言:javascript
运行
复制
╔═════════════════════════════════════════════════╦════════════════════╗
║                      Usage                      ║ Permissions needed ║
╠═════════════════════════════════════════════════╬════════════════════╣
║ ACTION_IMAGE_CAPTURE                            ║ none               ║
║ ACTION_VIDEO_CAPTURE                            ║ none               ║
║ INTENT_ACTION_STILL_IMAGE_CAMERA                ║ none               ║
║ android.hardware.camera2                        ║ CAMERA             ║
║ android.hardware.camera2 + ACTION_IMAGE_CAPTURE ║ CAMERA             ║
║ android.hardware.camera2 + ACTION_VIDEO_CAPTURE ║ CAMERA             ║
║ ...                                             ║ ...                ║
╚═════════════════════════════════════════════════╩════════════════════╝

上表仅适用于API 23+。

博士该怎么办?

选项1-如果你只使用ACTION_IMAGE_CAPTURE等.

从清单中删除CAMERA权限,您就会没事了。

选项2-如果使用其他CAMERA函数,则为

在运行时检查CAMERA权限,只有在权限可用时才启动意图

票数 74
EN

Stack Overflow用户

发布于 2017-03-28 12:56:02

嗨,疯子阿尔德巴兰,

首先,您需要在manifest.xml文件中添加以下权限。

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.CAMERA" />

检查android设备是否为Marshmallow。如果它的android或更高版本,那么使用下面的代码动态获得相机许可。 在android之前,我不想获得动态许可。 检查用户是否授予该权限。如果用户未被授予权限,则请求相机权限访问。

代码语言:javascript
运行
复制
private static final int MY_CAMERA_REQUEST_CODE = 100;
if (checkSelfPermission(Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {
           requestPermissions(new String[]{Manifest.permission.CAMERA},
                        MY_CAMERA_REQUEST_CODE);
            }

请求权限后,将显示“询问权限”,包含“允许”和“拒绝”选项。单击操作后,我们可以使用以下方法获得请求的结果。

代码语言:javascript
运行
复制
@Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == MY_CAMERA_REQUEST_CODE) {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();

            }

        }
票数 17
EN

Stack Overflow用户

发布于 2017-03-27 10:04:20

您应该使用AppCompatActivity,而不是扩展MainActivity。还有,请包括堆栈跟踪。

代码语言:javascript
运行
复制
public class MainActivity extends AppCompatActivity {

//......
}

啊!对不起。使用堆栈跟踪,可以清楚地看到主要问题。android.permission.CAMERA。对于请求,您应该创建权限检查。请检查这个例子,以创建权限检查。

示例:

1)包括活动。

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.CAMERA" />

2)确保向用户请求权限:

代码语言:javascript
运行
复制
if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {

            ActivityCompat.requestPermissions( this, new String[] {  android.Manifest.permission.ACCESS_COARSE_LOCATION  },
                                                LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION );
}

3)签入RunTime

代码语言:javascript
运行
复制
if ( Build.VERSION.SDK_INT >= 23 &&
             ContextCompat.checkSelfPermission( context, android.Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED) {
            return;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43042725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档