【达内课程】Android中短信相关操作

在这里插入图片描述
发送短信

在这里插入图片描述
发短信关键代码

		SmsManager smsManager = SmsManager.getDefault();
        String number = et_phone_number.getText().toString();
        String text = et_sms_content.getText().toString();
        smsManager.sendTextMessage(number,null,text,null,null);

AndroidManifest.xml中增加权限

    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

测试一下在这里插入图片描述
这种用代码发送的短信,是不会进入到短消息数据库的
没有对数据库进行任何操作

现在我们做一个功能,当短信发送成功,或失败,Toast下
在这里插入图片描述
主要代码如下,xml代码请自行脑补

public class SmsActivity extends Activity implements View.OnClickListener {
    private static final String ACTION_SEND_SMS_OK_OR_NOT = "ACTION_SEND_SMS_OK_OR_NOT";
    private static final String ACTION_RECEIVE_SMS_OK_OR_NOT = "ACTION_RECEIVE_SMS_OK_OR_NOT";
    private Button btn_send;
    private EditText et_phone_number;
    private EditText et_sms_content;
    private SmsStateReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);

        initViews();
        setListeners();
        //注册广播接收器
        receiver = new SmsStateReceiver();
        IntentFilter filter = new IntentFilter(ACTION_SEND_SMS_OK_OR_NOT);
        this.registerReceiver(receiver,filter);
    }

    @Override
    protected void onDestroy() {
        this.unregisterReceiver(receiver);
        super.onDestroy();
    }

    private void setListeners() {
        btn_send.setOnClickListener(this);
    }

    private void initViews() {
        btn_send = findViewById(R.id.btn_send);
        et_phone_number = findViewById(R.id.et_phone_number);
        et_sms_content = findViewById(R.id.et_sms_content);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_send:
                sendSms();
                break;
        }
    }

    private void sendSms() {
        SmsManager smsManager = SmsManager.getDefault();
        String number = et_phone_number.getText().toString();
        String text = et_sms_content.getText().toString();
        //提示用户短信是否发送成功
        Intent i1 = new Intent(ACTION_SEND_SMS_OK_OR_NOT);
        PendingIntent p1 = PendingIntent.getBroadcast(this,0,i1,PendingIntent.FLAG_UPDATE_CURRENT);
        //提示对方是否成功接收短信
        Intent i2 = new Intent(ACTION_RECEIVE_SMS_OK_OR_NOT);
        PendingIntent p2 = PendingIntent.getBroadcast(this,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
        smsManager.sendTextMessage(number,null,text,p1,p2);
    }

    /**
     * 短信收发状态的广播接收器
     */
    class SmsStateReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            int code = getResultCode();//结果码
            String action = intent.getAction();
            if(ACTION_SEND_SMS_OK_OR_NOT.equals(action)){
                switch (code){
                    case Activity.RESULT_OK://成功发送
                        Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(SmsActivity.this,"发送失败",Toast.LENGTH_SHORT).show();
                        break;
                }
            }else if(ACTION_RECEIVE_SMS_OK_OR_NOT.equals(action)){
                //提示是否接收成功
                switch (code){
                    case Activity.RESULT_OK://成功发送
                        Toast.makeText(SmsActivity.this,"对方已成功接收",Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(SmsActivity.this,"对方接收失败",Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }
    }
}

长短信

在这里插入图片描述

使用sendTextMessage发送短信会有70字限制,超过70个字,就会发送不成功

关键代码如下,在之前的基础上修改:

        ......
        //提示对方是否成功接收短信
        Intent i2 = new Intent(ACTION_RECEIVE_SMS_OK_OR_NOT);
        PendingIntent p2 = PendingIntent.getBroadcast(this,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
        //处理大文本短信
        ArrayList<String> bodies = smsManager.divideMessage(text);
        for(String body:bodies){
            smsManager.sendTextMessage(number,null,body,p1,p2);
        }

拦截短信

https://blog.csdn.net/u010356768/article/details/87253174

数据库读取短信

在这里插入图片描述

/data/data/com.android.providers.Telephoney/databases/

可以参考以下文章
https://blog.csdn.net/u010356768/article/details/87456426

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值