revoked permission android.permission.CAMERA

2020-06-30 17:36发布

I get ERROR revoked permission android.permission.CAMERA

I was using camera permission on manifest

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);
}

and error like this:

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

anyone can help me??

标签: android
5条回答
我只想做你的唯一
2楼-- · 2020-06-30 18:17

Hi lunatique aldebaran,

First of all you need to add the following permission in manifest.xml file.

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

Check whether the android device is Marshmallow or not. If its android M or greater version then use the following code to get camera permission dynamically.

Before android M dont want to get dynamic permission.

check if the user grant the permission. If user not granted permission then request the camera permission access.

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);
            }

After requesting the permission alert will display to ask permission contains allow and deny options. After clicking action we can get result of the request with the following method.

@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();

            }

        }
查看更多
该账号已被封号
3楼-- · 2020-06-30 18:20

I had similar issue but it looks like Android has a bug with this. When you add camera permission to AndroidManifest

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

You have to grant permission for it even you want to use external application for taking a photo. Deleting it from manifest has solved problem with SecurityException.

查看更多
贪生不怕死
4楼-- · 2020-06-30 18:23

Revoke Permission....It Simply say's you have invoked the permission again so no need to write permission for Camera again in Manifest file ......

Instead you just....need to write two line....to READ and Write External Storage which are enough to run your program it's enough to run your program

查看更多
家丑人穷心不美
5楼-- · 2020-06-30 18:25

Here's how I solved this problem.

Contrary to what most other answers say, REMOVE this from your Manifest file.

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

Why?

Starting Android M (API 23), if your app has CAMERA permission declared in the manifest, then, it needs that CAMERA permission to be GRANTED in order to access ACTION_IMAGE_CAPTURE etc... too (which normally do not require the CAMERA permission on their own). If not, then it automatically raises a SecurityException.

So, what to do?

Option 1- If you only need ACTION_IMAGE_CAPTURE etc..

Remove the CAMERA permission from manifest and you would be fine

Option 2- If you need CAMERA permission too

Check for CAMERA permission at runtime and only start the intent when the permission is available

查看更多
甜甜的少女心
6楼-- · 2020-06-30 18:29

You should use AppCompatActivity instead, of extending your MainActivity. And also please, include stacktrace.

public class MainActivity extends AppCompatActivity {

//......
}

Oh, sorry. With stacktrace it's clearly seen main problem. android.permission.CAMERA. For making request, you should create permission check. Please, check This Example, to create Permission checking.

Example:

1) Include to Activity.

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

2) Ensure you request permissions from the user:

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) Check in RunTime

if ( Build.VERSION.SDK_INT >= 23 &&
             ContextCompat.checkSelfPermission( context, android.Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED) {
            return;
}
查看更多
登录 后发表回答