Android 短信发送接收笔记

短信的发送

             两种发送方式:

                        一、利用系统的短信发送程序

                                1.Intent     发送一个隐式意图

                                   Intent    intent=new  Intent(Intent.ACTION_SENDTO);

                                   Uri   data=Uri.parse("smsto:"+"号码:例如15555215556");

                                   intent.setData(data);

                                   intent.putExtra("sms_body",etContent.getText().toString());

                                   starActivity(intent);

                                2.另外一种隐式意图

                                   Intent   intent =new   Intent(Intent.ACTION_VIEW);

                                   intent.setType('address","15555215556");

                                   intent.putExtra("sms_body",etContent.geText().toString());//获得的发送的信息

                                   startActivity(intent);

                        二、利用代码来发送短信消息

                               1.简单一些的写法

                                  SmsManager   manager=SmsManager.getDefault();

                                  manager.senTextMessage(对方手机号码,null,短信正文,null,null);

                               添加上两个PendingIntent,可以获得短信的发送状态

                                       //发送信息时间
                                      Intent   intent=new   Intent("com.tarena.SENT");
                                      PendingIntent   pi1=PendingIntent.getBroadcast(this, 0, intent, 0);

                                      //信息到达对方手机时间
                                      Intent   intent2=new Intent("com.tarena.DELIVERY");
                                      PendingIntent   pi2=PendingIntent.getBroadcast(this,0, intent2, 0);

                               利用代码发送短信,有两点要注意:

                                                                                     1)  申请权限SEND_SMS

                                                                                     2)  利用代码发送短信,短信是不会被系统写入数据表

短信的接收

                      安卓系统后台有一个服务(Service),专门用来接收短信消息,当有新的消息到达时,Service会发送一个广播,广播的Action是

            “android.provider.Telephony.SMS_RECEIVED”并且将收到短消息作为广播Intent的一部分(Intent的Extra)发送出去,先到先得!

             步骤:

                     1.注册广播接收器,接收“android.provider.Telephony.SMS_RECEIVED”广播

                              在onResume中注册:重写方法和onPause配套使用

                               MyReceiver   receiver=new   MyReceiver();//自己创建的一个类,继承BroadcastReceiver
                               IntentFilter    filter=new   IntentFilter();
                               filter.addAction("com.tarena.SENT");
                               filter.addAction("com.tarena.DELIVERY");
                               filter.addAction("android.provider.Telephony.SMS_RECEIVED");
                               filter.setPriority(1001);
                               registerReceiver(receiver, filter);

                               在MyReceive中:

                                        if("android.provider.Telephony.SMS_RECEIVED".equals(action)){
                                                //可以处理短消息
                                                Bundle bundle=intent.getExtras();
                                                Object[] pdus=(Object[]) bundle.get("pdus");
                                                StringBuilder sb=new StringBuilder();
                                                String phoneNumber="";
                                                //把一个一个pdus转为一段的短消息
                                                for (int i = 0; i < pdus.length; i++) {
                                                         SmsMessage message=SmsMessage.createFromPdu((byte[])pdus[i]);
                                                         sb.append(message.getDisplayMessageBody());
                                                         phoneNumber=message.getDisplayOriginatingAddress();
                                                 }
                                                 Log.i("TAG", "发送方电话:"+phoneNumber+",发送内容:"+sb);
                                                 //“有短信”这条广播不在继续下发
                                                abortBroadcast();
                                         }

                               在onPause()中注销:

                                         unregisterReceive

                     2.必须设定权限RECEIVE_SMS

                     3.设定较高的优先级(1000左右)

                               filter.setPriority(1001);

                     4.如果不希望系统的短信程序接收短信,就执行abortBroadcast();,广播停止下发

            问题:如果系统短信接收程序收不到短信了,那么这条短信也不会被写入数据库

                                 




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值