Android注册静态BroadcastReceiver可以监听到开机/关机/重启的状态.但是,关机的广播有的时候收不到,开机的广播延时特别大,体验不是很好.所以可以根据SystemProperties的各种属性的特征来解决开机广播接收慢的问题.
方法为SystemProperties.set(String key, String value);
key的属性有多种:
1.如果属性名称以“ro.”开头,那么这个属性被视为只读属性。设置之后,属性值不能改变。
2.如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。(一般需要系统权限.将应用提升到系统应用的方法:(1)在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system "。
(2)在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成LOCAL_CERTIFICATE :=platform。)
3.如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。这个属性的特性是重启之后就被抹掉,恢复到默认值.
根据上述的三个属性就可以知道,假设说我们设置"net."开头的属性,重启之后,值被恢复,就可以知道,做了重启操作.解决了关机广播不稳定,开机广播接收延迟的问题.
适用于一些非重启不能设置的场景.
代码:
设置:
public static final String NEED_REBOOT = "net.need.reboot";//只要net.开头就好,剩下的可以自定义
public static final String IS_SET = "true";//根据自己喜好定义
SystemProperties.set(NEED_REBOOT_KEY, IS_SET);//存值
取值:
String isReboot = SystemProperties.get(NEED_REBOOT_KEY);
if (!TextUtils.equals(IS_SET, isReboot)) 就代表,已经关机/重启过了,就可以做相应的操作了.