但是在一些手机上,使用API发送短信时会弹出一个请求权限的对话框。
是的,在安装有新的运行时权限模型的 Android Marshmallow 设备上会出现这种情况。
在尝试使用该权限之前,您需要使用checkSelfPermission
方法,如下所示:
if (Context.checkSelfPermission(Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(this,
new String[] { Manifest.permission.SEND_SMS},
MY_KEY_FOR_RETURNED_VALUE);
}
可选的,你可以(也应该)向用户显示一个理由(首先使用shouldShowRequestPermissionRationale
检查Android是否会要求用户授予权限-如果用户拒绝并标记“不再询问”,那么他将不会被提示,所以你应该先进行检查而不总是显示)。
然后在你的onRequestPermissionsResult
实现中检查请求的答案:
@override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (requestCode == MY_KEY_FOR_RETURNED_VALUE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
}
}
您可以在这里了解更多信息,也可以在官方文档这里找到。
PackageManager.checkPermission
可能行不通,但值得一试。您也可以查看AppOpsManager
类(使用((AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE)).checkOpNoThrow(permission, android.os.Process.myUid(), context.getPackageName());
)。除此之外,我建议使用try/catch
。很抱歉我帮不上更多的忙。 - Ori Lentz