短信(一)
来源:互联网 发布:vue.js怎么用 编辑:程序博客网 时间:2024/06/05 14:31
本篇介绍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 拦截短信并且删除短信(一)
- 一网通短信发送java代码,短信发送工具类
- 老婆的最后一條短信
- 老婆的最后一條短信
- Android开发(一)发送短信程序
- MTK短信模块分析(一)
- Android开发(一)发送短信程序
- 发送短信小程序升级版一
- 短信模块开发 tpdu格式(一)
- 短信模块开发 tpdu格式(一)
- android应用程序(一) 短信收发
- Android开发之旅一短信分享
- Android消息循环系统学习
- Sql语句:IF ELSE CASE WHEN WHILE CONTINUE BREAK
- Python学习_2015年12月16日
- Android dialog中出现异常android.view.WindowManager$BadTokenException
- 关于几种常用的通讯方式(2):USART、I2C、SPI
- 短信(一)
- android多线程下载更新UI问题
- 数据结构C++语言描述专题系列 (五) 递归
- H5绘图技术之canvas
- 制作PHP安装程序的原理和步骤
- 报错:1130-host ... is not allowed to connect to this MySql server
- 对泛型的理解
- ccoa 删除proc
- Handler的跨进程使用--Messenger学习