READ_PHONE_STATE 权限对话框未显示

READ_PHONE_STATE permission dialogue doesn't get shown

我需要向用户请求两个权限:READ_PHONE_STATEWRITE_EXTERNAL_STORAGE。我是这样做的:

public void checkPermissions() {
    if (Build.VERSION.SDK_INT >= 23) {
        ArrayList<String> missingPermisions = new ArrayList<>();
        if (checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            missingPermisions.add(android.Manifest.permission.READ_PHONE_STATE);
        }
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            missingPermisions.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (missingPermisions.size() > 0) {
            String[] permissions = missingPermisions.toArray(new String[missingPermisions.size()]);
            ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST);
        }
    }
}

onCreate() 中调用了方法 checkPermissions()。 从我请求的两个权限中,只显示 WRITE_EXTERNAL_STORAGE 对话。我已经检查过在执行期间 missingPermisions.size() 值是 2。我还尝试仅请求 READ_PHONE_STATE 权限,在这种情况下,对话框也没有显示。我的清单也包含这些权限:

<permission android:name="android.permission.INTERNET" />
<permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<permission android:name="android.permission.READ_PHONE_STATE" />
<permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />

为什么我的 READ_PHONE_STATE 权限对话框没有出现?我该如何解决?

并非所有权限都需要用户使用对话框询问。使用对话框仅询问危险权限(如写入存储)。

我已经通过更改解决了我的问题:

<permission android:name="android.permission.INTERNET" />
<permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<permission android:name="android.permission.READ_PHONE_STATE" />
<permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />

进入这个:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />

uses-permission and permission其实是有区别的。

Idk 如果你已经解决了它但是......你不需要检查然后将它们添加到列表中。 只需创建一个 String[] {permision, permision} 然后检查它们是否被授予。即使一个是,另一个不是,它仍然会提示用户允许它们。 我是这样做的:

// M = 23
        if (Build.VERSION.SDK_INT >= 23) {
            final int SMS = ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS);

            if (SMS != PackageManager.PERMISSION_GRANTED) {
                mDialogBuilder = new AlertDialog.Builder(this);
                mDialogBuilder.setTitle(R.string.perms)
                        .setMessage(R.string.text)
                        .setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                ActivityCompat.requestPermissions(MainActivity.this, new String[] {
                                        Manifest.permission.SEND_SMS,
                                        Manifest.permission.READ_PHONE_STATE,
                                }, MY_PERMISSIONS_REQUEST_SEND_SMS + MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
                            }
                        }).create().show();
            }
        }

我删除了您不需要的内容,因此代码格式不正确,但您可以看到,1 个权限检查下有 2 个权限,并且都显示了。 Ofc,在这种情况下,如果用户检查短信而不检查 RPS,对话框将不会再次打开