READ_PHONE_STATE 权限对话框未显示
READ_PHONE_STATE permission dialogue doesn't get shown
我需要向用户请求两个权限: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);
}
}
}
在 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,对话框将不会再次打开
我需要向用户请求两个权限: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);
}
}
}
在 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,对话框将不会再次打开