Android广播和短信广播详解(2)

sendStickyBroadcast() 意思只要是如果发送广播之后才执行registerReceiver(BroadcastReceiver,IntentFilter).这个方法依然可以接受到。换句话说,在ReceiverActivity里是通过代码来注册Recevier而不是在Manifest里面注册的。sendStickyBroadcast发出的最后一个Intent会被保留,当下次Recevier处于活跃的时候,又会接受到它。需要加BROADCAST_STICKY权限,否则会抛SecurityException

接收电池电量变化广播:

<action android:name="android.intent.action.BATTERY_CHANGED"/>

 

接收开机启动广播

<action android:name="android.intent.action.BOOT_COMPLETED"/>

并在进行权限声明

<uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED”/>

在Android中,程序的响应(Responsive)被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所监视,当BroadcastReceiver在10秒内没有执行完毕,Android会认为该程序无响应,所以在BroadcastReceiver里不能做一些比较耗时的操作,否则会弹出ANR(Application No Response)的对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成,而不是使用子线程的方法来解决,因为BroadcastReceiver的生命周期很短(在onReceive()执行后BroadcastReceiver的实例就会被销毁),子线程可能还没有结束BroadcastReceiver就先结束了。如果BroadcastReceiver结束了,它的宿主进程还在运行,那么子线程还会继续执行。但宿主进程此时很容易在系统需要内在时被优先杀死。因为它属于空进程(没有任何活动组件的进程)。

每次广播消息到来时,都会创建BroadcastReceiver实例来执行onReceive()方法。


事例:

 

package com.king.sms;      import java.text.SimpleDateFormat;   import java.util.Date;      import android.content.BroadcastReceiver;   import android.content.Context;   import android.content.Intent;   import android.telephony.SmsMessage;            public class SMSBroadcastReceiver extends BroadcastReceiver{          @Override       public void onReceive(Context context, Intent intent) {           Object[] pduses= (Object[])intent.getExtras().get("pdus");           for(Object pdus: pduses){               byte[] pdusmessage = (byte[])pdus;               SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);               String mobile = sms.getOriginatingAddress();//发送短信的手机号码                String content = sms.getMessageBody(); //短信内容                Date date = new Date(sms.getTimestampMillis());               SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");               String time = format.format(date);  //得到发送时间                           }       }      }  

//    AndroidManifest.xml

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwygwy.html