【问题标题】:Android how to run permission on the first runtime in OREOAndroid如何在OREO的第一个运行时运行权限
【发布时间】:2019-06-06 14:06:48
【问题描述】:

我希望用户在第一次打开应用程序时询问权限而不是第二次。此错误出现在 oreo 版本上

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // only for gingerbread and newer versions

            Dexter.withActivity(getActivity())
                    .withPermissions(
                            Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.CAMERA, Manifest.permission.CALL_PHONE
                    )
                    .withListener(new MultiplePermissionsListener() {
                        @Override
                        public void onPermissionsChecked(MultiplePermissionsReport report) {
                            // check if all permissions are granted
                            if (report.areAllPermissionsGranted()) {
                                // do you work now

                            }

                            // check for permanent denial of any permission
                            if (report.isAnyPermissionPermanentlyDenied()) {
                                // permission is denied permenantly, navigate user to app settings
                            }
                        }

                        @Override
                        public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                            token.continuePermissionRequest();
                        }
                    })
                    .onSameThread()
                    .check();
        }

【问题讨论】:

    标签: android android-8.0-oreo


    【解决方案1】:

    我正在使用从 6.0 到 9.0 的这段代码,它可以工作。在onCreate() 方法中。添加这个。

    注意 PERMISSION_REQUEST_CODE == 1

    这只是运行时权限的示例代码。你可以改变它

        if (ContextCompat.checkSelfPermission(Login.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(Login.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);
        }
    
        if (ContextCompat.checkSelfPermission(Login.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(Login.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_CODE);
        }
        if (ContextCompat.checkSelfPermission(Login.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(Login.this, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
        }
    

    【讨论】:

      【解决方案2】:

      运行时的多个请求权限。 这对我有用!

      List<String> listPermissionsNeeded = new ArrayList<>();
              if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)
                      != PackageManager.PERMISSION_GRANTED) {
                  listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
              }
              if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
                      != PackageManager.PERMISSION_GRANTED) {
                  listPermissionsNeeded.add(Manifest.permission.CAMERA);
              }
              if (ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE)
                      != PackageManager.PERMISSION_GRANTED) {
                  listPermissionsNeeded.add(Manifest.permission.CALL_PHONE);
              }
      
              if (!listPermissionsNeeded.isEmpty()) {
                  ActivityCompat.requestPermissions(this,
                          listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
                          REQUEST_ID_MULTIPLE_PERMISSIONS);
              }
      

      将此代码添加到清单

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

      【讨论】:

        猜你喜欢
        • 2017-07-05
        • 1970-01-01
        • 2016-05-11
        • 2021-10-05
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多