您的位置:首页 > 移动开发 > Android开发

短信(一)

2015-12-16 10:34 411 查看
本篇介绍android短信的接收,发送和拦截

当手机收到短信时,系统会发送一条广播android.provider.Telephony.SMS_RECEIVED,所以我们写一个接收器,当收到广播时去获取短信的内容就好(发现有一些app在获取验证码时会自动将短信中的验证码提取出来填上,很方便,估计就是这么做的)

Class SmsReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context,Intent intent){

Bundle bundle = intent.getExtras();//里面存了短信信息

Object[] pdus = (Object[])bundle.get("pdus");//把短信内容拿出来

SmsMessage smsMessages = new SmsMessage[pdus.length];

for(int i=0 ; i<smsMessages.length ; i++){

smsMessages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);//这两个数组是一一对应的

}

String tel_sender = smsMessages[0].getOriginatingAddress();//获取发送方的电话号

StringBuffer content = new StringBuffer();//用于存放短信的内容

for(SmsMessage smsMessage : smsMessages){

content .append(smsMessage.getMessageBody());//获取短信内容

}

    }

}

注意导包时import android.telephony.SmsMessage; 不要导gsm.SmsMessage,这个包已经废弃了

(简单说下StringBuffer与StringBuilder的区别,StringBuffer线程安全,StringBuilder线程不安全,但StringBuilder效率比StringBuffer高一些)

以上就是广播接收器的代码了,获取到的东西大家可以随意放到布局中,布局代码就不放上了,随便发挥。

千万别忘了加权限<uses-permission android:name="android.permission.RECEIVE_SMS"/>

广播动态注册:

IntentFilter filter = new IntentFilter();

filter.addAction("android.provider.Telephony.SMS_RECEIVED");

SmsReceiver receiver = new SmsReceiver();

registerReceiver(receiver,filter);

广播静态注册,在AndroidManifest.xml的application中:

<receiver android.name=".SmsReceiver">

<intent-filter>

<action android.name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>

</receiver>

在onDestroy中unregisterReceiver(receiver);注销掉

发送短信和接收差不太多,有几个不同点

发送的action是SENT_SMS_ACTION,即filter.addAction("SENT_SMS_ACTION");

比如我们用一个button控制发送短信,则在onclick里可以这么写

SmsManager manager = SmsManager.getDefault();

Intent intent = new Intent("SENT_SMS_ACTION");

PendingIntent pendingIntent = PendingIntent.getBroadcast(context,int requestCode,intent,int flag);//requestCode随便写应该就可以,flag在介绍Notification的文章中已经说过了,这里不再赘述

manager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);//最重要的发送

destinationAddress:这是你要发送给的那个电话号

scAddress:短信中心号码,传null则为默认中心号码(一般是null,不知道有多大用处)

text:短信的内容

sendIntent:把上面的intent放上就行

deliveryIntent:当消息发送到对方手机时这个intent会被广播(也是PendingIntent)

如果想知道是否发送成功则可以在发送的广播接收onReceive中判断getResultCode如果和RESULT_OK相等,则则成功了

短信广播是有序广播,所以我们可以拦截掉

加上filter.setPriority(int值);给个优先级然后在onReceive中调用abortBroadcast();中断广播就好了

先说这么多,感谢大家支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 短信