这里是代码:
SELECT table2.id
FROM table2
WHERE table2.id NOT IN (
SELECT DISTINCT table1.id
FROM table1
)
我已声明使用" android.permission.SEND_SMS"的权限在AndroidManifest.xml中 但是在某些手机上,当使用api发送短信时,会弹出一个询问权限的对话框,如果用户选择" Not grant"许可,短信发送将无声地失败,没有任何回叫或广播 问题是:有没有办法检测这种阻塞?
答案 0 :(得分:3)
但是在某些手机上,当使用api发送短信时,会弹出一个请求权限的对话框
是的,这将在具有新运行时权限模型的Android Marshmallow设备上发生。
在尝试使用此权限之前,您需要使用checkSelfPermission
方法:
if (Context.checkSelfPermission(Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED) {
// permission is not granted, ask for permission:
requestPermissions(this, //assuming this is Activity or a subclass of it
new String[] { Manifest.permission.SEND_SMS},
MY_KEY_FOR_RETURNED_VALUE);
}
或者,您可以(并且应该)向用户显示基本原理(首先检查Android是否甚至会使用shouldShowRequestPermissionRationale
向用户询问该权限 - 例如,用户不会被提示他否认并标记“不要再问我”,所以你应该先检查,而不是总是显示。)
然后在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) {
// permission is granted
}
}
答案 1 :(得分:0)
这是我用来检查权限的代码 -
// Check Permission fails on Android OSes below Marshmallow, so the below if sentence is necessary
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] {Manifest.permission.SEND_SMS},
REQUEST_CODE_ASK_PERMISSIONS);
}
}
答案 2 :(得分:0)
对于Android 6.0,我使用
boolean isBlocked = shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS);
检查是否检查权限永不再询问。
如果isBlocked
返回true,则只需点击拒绝权限。
如果isBlocked
返回false,则会检查权限永不再询问。并且权限被阻止。
在使用该方法之前先检查构建版本。
if (Build.VERSION.SDK_INT >= M){
boolean isBlocked = shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS);
}