第一次打开相机时,我没有权限

时间:2017-08-07 12:03:36

标签: android android-recyclerview

我第一次访问相机时遇到问题。我安装了  我的应用。接下来转到QR码扫描。我用来扫描QR码谷歌的愿景。应用程序显示对话框,显示有关权限,然后单击"允许"但相机不会打开。但是我回去活动,去扫描QR码,相机打开的活动。

我的AdnroidManifest.xml

我的班级

next(f).next(f)

2 个答案:

答案 0 :(得分:0)

在您的代码中实现以下方法

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 0:
                boolean isPerpermissionForAllGranted = false;
                if (grantResults.length > 0 && permissions.length==grantResults.length) {
                    for (int i = 0; i < permissions.length; i++){
                        if (grantResults[i] == PackageManager.PERMISSION_GRANTED){
                            isPerpermissionForAllGranted=true;
                        }else{
                            isPerpermissionForAllGranted=false;
                        }
                    }

                    Log.e("value", "Permission Granted, Now you can use local drive .");
                } else {
                    isPerpermissionForAllGranted=true;
                    Log.e("value", "Permission Denied, You cannot use local drive .");
                }
                if(isPerpermissionForAllGranted){
                    // Fire here again for camera
                    createCameraSource();
                }
                break;
            }
        }

所以会发生什么是当您触发对话框以获得权限时,您可以实现结果方法以了解您是否被授予了权限。因此,您可以在此检查是否已授予您的权限请求权限,您可以再次启动方法来打开相机。

答案 1 :(得分:0)

从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时。此方法简化了应用安装过程,因为用户在安装或更新应用时无需授予权限。

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean checkPermission()
{
   int currentAPIVersion = Build.VERSION.SDK_INT;
   if(currentAPIVersion>=android.os.Build.VERSION_CODES.M)
   {
       if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
           if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.WRITE_CALENDAR)) {
               AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
               alertBuilder.setCancelable(true);
               alertBuilder.setTitle("Permission necessary");
               alertBuilder.setMessage("Write calendar permission is necessary to write event!!!");
               alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                   @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
                   public void onClick(DialogInterface dialog, int which) {
                       ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_WRITE_CALENDAR);
                   }
               });
               AlertDialog alert = alertBuilder.create();
               alert.show();
           } else {
               ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_WRITE_CALENDAR);
           }
           return false;
       } else {
           return true;
       }
   } else {
       return true;
   }
}

参考文献: https://developer.android.com/training/permissions/requesting.html https://www.sitepoint.com/requesting-runtime-permissions-in-android-m-and-n/ http://www.theappguruz.com/blog/runtime-permissions-in-android-marshmallow