Попытка реализовать разрешения камеры для андроида M не получает виртуального метода checkSelfPermission

Я попытался реализовать разрешения камеры таким образом:

private void checkCameraPermissions() {
        if(checkCameraHardware(this)) {
            if (checkSelfPermission(Manifest.permission_group.camera)
                    != PackageManager.PERMISSION_GRANTED) {

                Crashlytics.log("Requesting camera permission");

                // Should we show an explanation?
                if (shouldShowRequestPermissionRationale(
                        Manifest.permission_group.camera)) {
                    // Explain to the user why we need to use the camera
                    showRationaleForCameraUse();
                }

                requestPermissions(new String[]{Manifest.permission_group.camera},
                        Constants.MY_PERMISSIONS_REQUEST_CAMERA_GROUP);

                // MY_PERMISSIONS_REQUEST_CAMERA_GROUP is an
                // app-defined int constant
            } else {
                startApp();
            }
        }else{
            showNoCameraAvailableAlert();
        }
    }

@Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case Constants.MY_PERMISSIONS_REQUEST_CAMERA_GROUP: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay!
                    // start the app
                    startApp();

                } else {

                    // permission denied, boo!
                    // leav the app!
                    showNoCameraAvailableAlert();
                }
                return;
            }

            // other 'switch' lines to check for other
            // permissions this app might request
        }
    }

и получил следующую ошибку:

java.lang.NoSuchMethodError: No virtual method checkSelfPermission(Ljava/lang/String;)I in class Lim/emu/app/emu/app/view/splash/SplashActivity; or its super classes (declaration of 'im.emu.app.emu.app.view.splash.SplashActivity' appears in /data/app/im.emu.app.emu.test-1/base.apk)
            at im.emu.app.emu.app.view.splash.SplashActivity.checkCameraPermissions(SplashActivity.java:74)
            at im.emu.app.emu.app.view.splash.SplashActivity.onCreate(SplashActivity.java:52)
            at android.app.Activity.performCreate(Activity.java:5977)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
            at android.app.ActivityThread.access$800(ActivityThread.java:148)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5274)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
08-30 16:34:10.801  17087-17357/im.emu.app.emu.test I/Fabric﹕ Crashlytics report upload complete: 55E30629033A-0001-42BF-296ED8AC703A.cls

Любые идеи, как я могу это исправить? постскриптум если вам нужна дополнительная информация, пожалуйста, спросите

Ответ 1

Вы должны запустить код на устройстве, работающем на предыдущих версиях. Вместо этого вы должны использовать ContextCompat.checkSelfPermission().

Ответ 2

Осторожно с помощью

'shouldShowRequestPermissionRationale(
                        Manifest.permission_group.camera)'   

У меня возникла проблема с группой разрешений, где он хотел получить индивидуальное разрешение, а не группу, и выбрал бы исключение, если бы вы использовали другое.

Ответ 3

Вместо этого вы должны использовать ActivityCompat.checkSelfPermission() для обратной возможности на устройствах Pre-Lollipop. Таким образом, this.checkSelfPermission() может использоваться только для приложений, объявляющих minSdkVersion 23

Ответ 4

Вы забыли дать разрешение в AndroidManifest.xml

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