READ_PHONE_STATE权限对话框未显示

时间:2018-01-08 09:27:38

标签: android android-permissions runtime-permissions

我需要向用户请求两项权限: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);
        }
    }
}

checkPermissions()中调用方法onCreate()。 从我请求的两个权限中只显示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权限对话无法显示?我该如何解决?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

<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-permissionpermission之间存在差异。

答案 2 :(得分:0)

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如果用户检查SMS而不检查RPS,则对话框将不会再次打开