Может запрашивать только один набор разрешений одновременно. Попытка получить доступ к моей камере Android - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь получить доступ к своей камере, и в результате она не открывает камеру и продолжает говорить, что «может запрашивать только один набор разрешений за один раз». Кто-нибудь может помочь с этой проблемой?

Я получил это сообщение в своей logcat:

I / Хронология: Хронология: Activity_launch_request время: 318319760 намерение: Intent {act = android.content.pm.action.REQUEST_PERMISSIONS pkg = com.google.android.packageinstaller (имеет дополнительные функции)} W / Activity: может запрашивать только один набор разрешений за раз

А вот мой код, который яВы запросили разрешение на камеру:

private static final String[] PERMISSIONS = {
            Manifest.permission.CAMERA
    };

    private static final int REQUEST_PERMISSIONS = 42;
    private static final int PERMISSION_COUNT = 1;    
@SuppressLint("NewApi")
    private boolean arePermissionDenied(){
        for(int i = 0; i<PERMISSION_COUNT;i++){
            if(checkSelfPermission(PERMISSIONS[i])!= PackageManager.PERMISSION_GRANTED){
                return true;
            }
        }
        return false;
    }

    @SuppressLint("NewApi")
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
        super.onRequestPermissionsResult(requestCode,permissions,grantResults);

        if(requestCode==REQUEST_PERMISSIONS && grantResults.length > 0){
            if(arePermissionDenied()){
                ((ActivityManager)(this.getSystemService(ACTIVITY_SERVICE))).clearApplicationUserData();
                recreate();
            }
            else{
                onResume();
            }
        }
        else{

        }
    }

    //Variable onResume method
    private boolean isCameraInitialized;
    private Camera mCamera = null;
    private static SurfaceHolder myHolder;
    private static CameraPreview mPreview;
    private static OrientationEventListener orientationEventListener = null;

    @Override
    protected void onResume(){
        super.onResume();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            requestPermissions(PERMISSIONS,REQUEST_PERMISSIONS);
            return;
        }

        if(!isCameraInitialized){
            mCamera=Camera.open();
            mPreview = new CameraPreview(this,mCamera);
            frameLayout.addView(mPreview);
            rotateCamera();
            orientationEventListener = new OrientationEventListener(this) {
                @Override
                public void onOrientationChanged(int orientation) {
                    rotateCamera();
                }
            };
            orientationEventListener.enable();
        }
    }

1 Ответ

0 голосов
/ 07 октября 2019

Вы можете попробовать код ниже. Сначала используйте что-то вроде этого, чтобы проверить, предоставил ли пользователь разрешение вместо вашего arePermissionDenied метода:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED)

Затем вы могли бы попросить пользователей предоставить разрешение следующим образом:

ActivityCompat.requestPermissions(activity, new String[] {Manifest.permission.CAMERA}, requestCode);

После нажатия на запрос мы можем получить результат в onRequestPermissionResult методе, как показано ниже:

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

Надеюсь, это поможет !!!

...