Android6.0发送短信Demo

来源:互联网 发布:arcgis能安装在mac吗 编辑:程序博客网 时间:2024/06/10 01:27

整理一下使用SmsManager类发送短信的方法。
https://developer.android.com/reference/android/telephony/SmsManager.html

SmsManager类的描述如下图:
这里写图片描述

使用的关键方法是sendTextMessage()发短信。
https://developer.android.com/reference/android/telephony/SmsManager.html#sendTextMessage(java.lang.String,%20java.lang.String,%20java.lang.String,%20android.app.PendingIntent,%20android.app.PendingIntent)
该方法的使用说明如下图:
这里写图片描述


根据以上资料,结合Andriod6.0的运行时权限,发短信Demo如下:

public class MainActivity extends AppCompatActivity {    private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1;    private EditText et_number;    private EditText et_content;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 获取控件        et_number = (EditText) findViewById(R.id.et_number);        et_content = (EditText) findViewById(R.id.et_content);    }    // 在XML中指定的按钮回调方法    public void Send(View v){        // 检查是否获得了权限(Android6.0运行时权限)        if (ContextCompat.checkSelfPermission(this,                Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED){            // 没有获得授权,申请授权            if (ActivityCompat.shouldShowRequestPermissionRationale(this,                    Manifest.permission.SEND_SMS)) {                // 返回值://                     如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.//                     如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.//                     如果设备策略禁止应用拥有这条权限, 这个方法也返回false.                // 弹窗需要解释为何需要该权限,再次请求授权                Toast.makeText(this, "请授权!", Toast.LENGTH_LONG).show();                // 帮跳转到该应用的设置界面,让用户手动授权                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);                Uri uri = Uri.fromParts("package", getPackageName(), null);                intent.setData(uri);                startActivity(intent);            }else{                // 不需要解释为何需要该权限,直接请求授权                ActivityCompat.requestPermissions(MainActivity.this,                        new String[]{Manifest.permission.SEND_SMS},                        MY_PERMISSIONS_REQUEST_SEND_SMS);            }        }else {            // 已经获得授权,可以发短信            SendSms();        }    }    private void SendSms() {        // 获取数据内容        String number = et_number.getText().toString();        String content = et_content.getText().toString();        // 为空判断        if (TextUtils.isEmpty(number)||TextUtils.isEmpty(content)) {            // 提醒用户            Toast.makeText(this, "号码或内容不能为空!", Toast.LENGTH_SHORT).show();        } else {            // 使用SmsManager类            SmsManager smsManager = SmsManager.getDefault();            // 短信内容可能很长,需要分发            ArrayList<String> parts = smsManager.divideMessage(content);            // 发送短信,需要权限//          smsManager.sendMultipartTextMessage(number, null, parts, null, null);            for(String text : parts) {                smsManager.sendTextMessage(number, null, text, null, null);            }             // 发送完成后弹窗提示            AlertDialog.Builder builder = new AlertDialog.Builder(this);            builder.setMessage("已发送!")                    .setNegativeButton("好!", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        // 关闭当前弹窗                        dialog.dismiss();                    }                });            AlertDialog dialog = builder.show();        }    }    // 处理权限申请的回调    @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) {                    // 授权成功,继续发短信                    SendSms();                } else {                    // 授权失败!                    Toast.makeText(this, "授权失败!", Toast.LENGTH_LONG).show();                }                break;            }        }    }}

要点小结:

  • 使用SmsManager类发送短信。
  • 使用SmsManager.getDefault()来获得SmsManager类实例。
  • 短信内容过长时,需要使用divideMessage()方法来分割。
  • 号码和短信内容需要加上为空判断,否则报错非法参数异常。
  • 【重要】只在真机上可行,也许是模拟器没有SIM卡的原因?
0 0
原创粉丝点击