我需要向用户请求两项权限:READ_PHONE_STATE
和WRITE_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
权限对话无法显示?我该如何解决?
答案 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-permission和permission之间存在差异。
答案 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,则对话框将不会再次打开