android开机没有收到发送开机广播会导致很多问题,比如无法待机,或者进行网络升级,一堆问题。
这个很大的原因是launcher起来后一下就跳转到另一个apk,导致PowerManagerService注册的广播接收器没有接收到BOOT_COMPLETE,导致无法待机
待机的解决方法可以是另外增加对开机动画结束的监听:
文件路径: frameworks/base/services/java/com/android/server/power/PowerManagerService.java
private static boolean ifBootCompleteSentBeforeWeStartListenning = false;
Slog.d(TAG, "BootCompletedReceiver get bootCompleted");
2515 + if(!ifBootCompleteSentBeforeWeStartListenning){
2516 + startWatchingForBootAnimationFinished();
2517 + ifBootCompleteSentBeforeWeStartListenning = true;
2518 + }
但是这样子只能是接收到开机广播,开机还不算真正的完成,至少ActivityManagerService.java 里面有个finishBooting还不会走到,sys.boot_completed,dev.bootcomplete属性还没有设
解决的一个办法是launcher跳转的时候加个延迟
public class MainActivity extends Activity {
private static final String TAG = "Launcher-MainActivity";
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
protected void onResume() {
super.onResume();
new Thread(new Runnable() {
@Override
public void run() {
try{
Log.i(TAG, "sleep200");
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
Intent intent = new Intent();
ComponentName com = new ComponentName("com.amt.zeroconfig","com.amt.zeroconfig.MainActivity");
intent.setComponent(com);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}).start();
}
}
这个很大的原因是launcher起来后一下就跳转到另一个apk,导致PowerManagerService注册的广播接收器没有接收到BOOT_COMPLETE,导致无法待机
待机的解决方法可以是另外增加对开机动画结束的监听:
文件路径: frameworks/base/services/java/com/android/server/power/PowerManagerService.java
private static boolean ifBootCompleteSentBeforeWeStartListenning = false;
Slog.d(TAG, "BootCompletedReceiver get bootCompleted");
2515 + if(!ifBootCompleteSentBeforeWeStartListenning){
2516 + startWatchingForBootAnimationFinished();
2517 + ifBootCompleteSentBeforeWeStartListenning = true;
2518 + }
但是这样子只能是接收到开机广播,开机还不算真正的完成,至少ActivityManagerService.java 里面有个finishBooting还不会走到,sys.boot_completed,dev.bootcomplete属性还没有设
解决的一个办法是launcher跳转的时候加个延迟
public class MainActivity extends Activity {
private static final String TAG = "Launcher-MainActivity";
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
protected void onResume() {
super.onResume();
new Thread(new Runnable() {
@Override
public void run() {
try{
Log.i(TAG, "sleep200");
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
Intent intent = new Intent();
ComponentName com = new ComponentName("com.amt.zeroconfig","com.amt.zeroconfig.MainActivity");
intent.setComponent(com);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}).start();
}
}