从安卓获取短信内容为例 浅谈安卓的广播的使用
来源:互联网 发布:淘宝怎么设置不包邮 编辑:程序博客网 时间:2024/05/22 14:09
安卓中的广播事件分为两种,一种是系统的广播;一种是自定义的广播。
手机在收到短信,接到电话,系统都会向所有应用发送广播,如果程序中声明了获取短信等先关权限就能获取这些广播,从而获取自己想要的相关信息,如短信内容等。
自定义的广播:
可以在程序中发送广播,目前我了解的只能是本程序来接收这些广播。
下面说下接收广播的方式。要想接收广播,需要先注册广播接收器,一种静态的,一种动态的。
<!--短信广播接收者 --> <receiver android:name="com.ldkj_bank.www.util.SmsReciver" > <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
这段代码的意思是SmsReciver这个类可以接收短信的广播。当然,这个类必须继承自BroadcastReceiver
动态的需要创建专门的广播接收类,此类继承于BroadcastReceiver
//=========================广播接收器========================================================== private class MyBroadcastRecv extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();SmsMessage msg = null;if (null != bundle) {Object[] smsObj = (Object[]) bundle.get("pdus");for (Object object : smsObj) {msg = SmsMessage.createFromPdu((byte[]) object); Date date = new Date(msg.getTimestampMillis());//时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String receiveTime = format.format(date);System.out.println("number:" + msg.getOriginatingAddress()+ " body:" + msg.getDisplayMessageBody() + " time:"+ msg.getTimestampMillis());//在这里写自己的逻辑if (msg.getOriginatingAddress().equals("1069020510184195")) { //这里我是要获取自己短信服务号码中的验证码~~ Pattern pattern = Pattern.compile("[0-9]{6}"); Matcher matcher = pattern.matcher(msg.getDisplayMessageBody()); if (matcher.find()) { String res = matcher.group().substring(0, 6); final EditText numberText = (EditText) numberDialog.findViewById(R.id.pay_pwd); numberText.setText(res); } }}}} }广播接收器设置好了,就要告诉它需要接收什么类型的广播了,就是绑定接收广播的类型.可以参考下边的函数:
//注册广播接收器private void regBroadcastReceiver(){broadcastRecv = new MyBroadcastRecv();IntentFilter filter = new IntentFilter();filter.addAction("android.provider.Telephony.SMS_RECEIVED");;registerReceiver(broadcastRecv, filter);}这段程序的意思就是broadcastRecv可以接收短信的广播。
接收系统的广播还要在AndriodManifest.xml文件中声明的权限。例如上边所说的获取短信的权限。要加入如下代码:
<!--获取读取短信的权限 --> <uses-permission android:name="android.permission.RECEIVE_SMS" > </uses-permission> <uses-permission android:name="android.permission.READ_SMS" > </uses-permission>
下边是截取的发送广播的一段代码:
//发送用户更新广播private void sendPersonHasChangedBroadcast(){Intent intent = new Intent();intent.setAction(Constant.personHasChangedAction);sendBroadcast(intent);}Constant,personHasChangeAction是一个自定义字符串,便于接收端接收区分是什么广播,这样就发出去了。接收还和上边的接收方式类似。通过广播接收器类的onReceive方法接收。intent.getAction()获取字符串来区分,类如如下代码:
//广播接收器处理类private class ServiceBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(Constant.WIFIACTION) || intent.getAction().equals(Constant.ETHACTION)){new CheckNetConnectivity().start();}else if(intent.getAction().equals(Constant.updateMyInformationAction)){getMyInfomation();comBridge.joinOrganization();}else if(intent.getAction().equals(Constant.refuseReceiveFileAction)){comBridge.refuseReceiveFile();}else if(intent.getAction().equals(Constant.imAliveNow)){}}}
那么什么时候用自定义广播合适呢?
一般是用于这个程序有service类在界面下来接收、处理请求,或者做其他的事情。需要刷新界面的时候。就发送广播。如果service收到一个消息,需要在界面中显示出来,就用到了。
0 0
- 从安卓获取短信内容为例 浅谈安卓的广播的使用
- 安卓短信验证码的获取
- 使用广播接收者窃听短信--安卓广播介绍
- android安卓广播的使用
- 安卓:广播BroadcastReceiver的使用
- 安卓短信拦截通过广播接收
- 安卓广播使用时的ANR问题,onReceive的生命周期为10秒
- 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。
- 安卓开发:广播接收器的使用【实现传值】
- 安卓开发之广播的使用(Broadcast)
- [安卓开发] Broadcast 三种广播的使用总结
- 安卓广播升级 RxBus的实现及简单使用
- 安卓广播使用 BroadcastReceiver
- 安卓中的广播使用
- 安卓手机的广播事件
- 安卓的广播机制学习
- 关于安卓的广播机制Broadcast
- 安卓-广播技术的入门
- 排序:冒泡排序
- IOS UITableView中Cell的重用reuse机制分析
- java显式锁
- POJ 3752 字母旋转游戏
- 微信浏览器强制使用
- 从安卓获取短信内容为例 浅谈安卓的广播的使用
- 设计模式05_抽象工厂模式
- mysql删除重复数据
- 轮播图简单实现
- 【Android新手笔记五】okhttp3网络通信框架
- java list排序
- IaaS, PaaS和SaaS公司都做些什么
- 从虚幻 4 中采集 360 度立体电影
- Jmeter之参数化