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

标签 android android-permissions

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

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

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

我遇到的问题:

  1. shouldShowRequestPermissionRationale() 返回 false
  2. requestPermissions() 未授予权限。

等级详情:compileSdkVersion 23,buildToolsVersion "23.0.3",targetSdkVersion 23

list 详细信息:我已添加以下权限

使用权限 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;
        }
    }
}

最佳答案

MODIFY_PHONE_STATE 是仅限系统的权限,因此您不能在您的应用中访问或使用此权限。

Android 应用有两种类型:系统应用和用户应用

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

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

为了将应用作为系统应用安装到您的 Android 设备上,您的设备必须已获得 root 权限或安装了自定义恢复(或两者)。

关于android - requestPermissions() 不适用于 API 23 中的 Manifest.permission.MODIFY_PHONE_STATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431807/

相关文章:

android - 避免其他 Android 应用程序收听我的广播?

java - 数据不再保存到我的 SQLite 数据库中的表中

android - 我如何在 react 原生 webview 中从网页访问当前位置

android - 仅使用 ServerValue.TIMESTAMP 从 firebase 服务器获取时间和日期

android - 使用 Lint 分析代码以查找需要权限的调用

android - 尽管 list 中存在 INTERNET 权限,但仍出现 java.lang.SecurityException

java - SQLite 中的 ListView 显示异常

android - 如何部署可以从我的应用程序加载的 android 插件

Android Studio 在真实设备上运行应用程序后添加了不需要的权限

android - 包括 <使用权限 android :name ="android.permission.INTERNET"/> in manifest causes error