在android中发送短信(marshmallow)

时间:2017-03-20 13:48:22

标签: android android-6.0-marshmallow smsmanager

我尝试使用smsmanage发送短信。问题是应用程序在用户发出sms权限后第一次发送短信。在第一次申请之后没有请求许可(因为用户已经第一次给了许可)并且它也没有发送短信

    private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1;

 public void requestpermisson(){
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.SEND_SMS)) {
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.SEND_SMS},
                        MY_PERMISSIONS_REQUEST_SEND_SMS);
            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_SEND_SMS: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(phonenumber, null,smsbody, null, null);
                    Toast.makeText(getApplicationContext(), "SMS sent.",
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(),
                            "SMS faild, please try again.", Toast.LENGTH_LONG).show();
                    return;
                }
            }

2 个答案:

答案 0 :(得分:0)

授予权限时,您不会处理此案例。在requestpermisson()方法中放置一个else块。添加用于在else块中发送sms的代码

public void requestpermisson(){
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.SEND_SMS)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.SEND_SMS)) {
        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.SEND_SMS},
                    MY_PERMISSIONS_REQUEST_SEND_SMS);
        }
    }else{         //already has permission granted
          SmsManager smsManager = SmsManager.getDefault();
          smsManager.sendTextMessage(phonenumber, null,smsbody, null, null);
          Toast.makeText(getApplicationContext(), "SMS sent.",
                        Toast.LENGTH_LONG).show();

    }
}

答案 1 :(得分:0)

只需在代码中进行以下更改即可。您尚未处理已授予权限的情况。

    if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.SEND_SMS)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.SEND_SMS)) {
                } else {
       // permission is already granted
                    ActivityCompat.requestPermissions(this,
                            new String[]{Manifest.permission.SEND_SMS},
                            MY_PERMISSIONS_REQUEST_SEND_SMS);
                }
            } else {
       SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage(phonenumber, null,smsbody, null, null);
                Toast.makeText(getApplicationContext(), "SMS sent.",
                        Toast.LENGTH_LONG).show();
}