如何通过权限检查阻止短信发送?

时间:2016-02-25 09:51:17

标签: android sms

这里是代码:

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"许可,短信发送将无声地失败,没有任何回叫或广播 问题是:有没有办法检测这种阻塞?

3 个答案:

答案 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
       }
    }

您可以在here或官方文档here中找到更多信息。

答案 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); }

这是Documentation.