从安卓获取短信内容为例 浅谈安卓的广播的使用
2016-06-02 15:17
351 查看
安卓中的广播事件分为两种,一种是系统的广播;一种是自定义的广播。
系统的广播:
手机在收到短信,接到电话,系统都会向所有应用发送广播,如果程序中声明了获取短信等先关权限就能获取这些广播,从而获取自己想要的相关信息,如短信内容等。
自定义的广播:
可以在程序中发送广播,目前我了解的只能是本程序来接收这些广播。
下面说下接收广播的方式。要想接收广播,需要先注册广播接收器,一种静态的,一种动态的。
静态的需要在AndriodManifest.xml中的application标签下加入如下代码:
这段代码的意思是SmsReciver这个类可以接收短信的广播。当然,这个类必须继承自BroadcastReceiver
动态的需要创建专门的广播接收类,此类继承于BroadcastReceiver
接收系统的广播还要在AndriodManifest.xml文件中声明的权限。例如上边所说的获取短信的权限。要加入如下代码:
以上所说的均为获取系统的广播,那么如果我在程序中,想要自己想要发送一个广播,然后让其他的程序接收怎么办呢?
下边是截取的发送广播的一段代码:
那么什么时候用自定义广播合适呢?
一般是用于这个程序有service类在界面下来接收、处理请求,或者做其他的事情。需要刷新界面的时候。就发送广播。如果service收到一个消息,需要在界面中显示出来,就用到了。
系统的广播:
手机在收到短信,接到电话,系统都会向所有应用发送广播,如果程序中声明了获取短信等先关权限就能获取这些广播,从而获取自己想要的相关信息,如短信内容等。
自定义的广播:
可以在程序中发送广播,目前我了解的只能是本程序来接收这些广播。
下面说下接收广播的方式。要想接收广播,需要先注册广播接收器,一种静态的,一种动态的。
静态的需要在AndriodManifest.xml中的application标签下加入如下代码:
<!--短信广播接收者 --> <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{ @Override public 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{ @Override public 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收到一个消息,需要在界面中显示出来,就用到了。
相关文章推荐
- php结合安卓客户端实现查询交互实例
- 安卓输入框被虚拟键盘挡住的问题(微信开发)
- Android安卓中循环录像并检测内存卡容量
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- 在安卓系统中插入表情到光标位置的代码详解
- Almp 安卓系统上搭建本地php服务器环境的步骤
- 谷歌被屏蔽后如何搭建安卓环境
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
- 安卓(Android)聊天机器人实现代码分享
- 安卓(android)怎么实现下拉刷新
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- Android中Fragment的生命周期与返回栈的管理
- Android提高之BroadcastReceiver实例详解
- 详解Android中BroadCastReceiver组件
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
- Android开发之BroadcastReceiver用法实例分析
- 分享一个安卓的内置多种工具类的Activity
- 安卓系统中实现摇一摇画面振动效果的方法
- java实现获取安卓设备里已安装的软件包