requestPermissions()不适用于API 23中的Manifest.permission.MODIFY_PHONE_STATE

时间:2016-07-18 08:21:56

标签: android android-permissions

我在实现运行时权限时遇到问题。我通过下面的链接来实现运行时权限:

https://developer.android.com/training/permissions/requesting.html

我只面临android.permission.MODIFY_PHONE_STATE的问题。我已经测试了以下代码的CAMERA权限和代码在相机权限下工作正常。

我面临的问题:

  1. shouldShowRequestPermissionRationale()返回false
  2. requestPermissions()不授予权利。
  3. 成绩明细:compileSdkVersion 23,buildToolsVersion“23.0.3”,targetSdkVersion 23

    清单详情:我已添加以下权限

    uses-permission android:name =“android.permission.MODIFY_PHONE_STATE”

        private static final int PERMISSIONS_REQUEST_CODE = 123;  
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            int granted = PackageManager.PERMISSION_GRANTED;
            int result = ContextCompat.checkSelfPermission(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
    
        if (result == granted) {
            Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
    
        }
        if (result != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(ActivityMain.this, "permissions denied", Toast.LENGTH_LONG).show();
          boolean res = ActivityCompat.shouldShowRequestPermissionRationale(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
     // returning false
             if (res) {
               new AlertDialog.Builder(ActivityMain.this)
               .setMessage("Allow")
                      .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                         @Override
                          public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.requestPermissions(ActivityMain.this,
                                    new String[]{Manifest.permission.MODIFY_PHONE_STATE},
                                  PERMISSIONS_REQUEST_CODE);
                        }
                     }).setNegativeButton(android.R.string.cancel, null).show();
            } else {
                ActivityCompat.requestPermissions(ActivityMain.this,
                        new String[]{Manifest.permission.MODIFY_PHONE_STATE},
                        PERMISSIONS_REQUEST_CODE);
            }
        }
    }
        @Override
    public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
           switch (requestCode) {
               case PERMISSIONS_REQUEST_CODE: {
                 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
                  } else {
                    Toast.makeText(ActivityMain.this,"permissions not granted",Toast.LENGTH_LONG).show();
                }
                return;
            }
        }
    }
    

1 个答案:

答案 0 :(得分:3)

MODIFY_PHONE_STATE是系统专用权限,因此您无法在应用中访问或使用此权限。

有两种类型的Android应用程序:system&用户

系统应用基本上是预先安装了ROM的应用。在标准的Android用户环境中,用户没有对/ system分区的写入权限,因此无法直接安装或卸载系统应用程序。

用户应用只是通过Google Play商店安装的所有常规应用。这些进入Android手机的数据分区,这是内部存储器的一部分,可用于用户数据和应用程序。

要在Android设备上将应用程序安装为系统应用程序,您的设备必须已植根或已安装自定义恢复(或两者都有)。