如果不对Android系统进行订制,只用SDK提供的功能达到开机启动App主界面的目的在理论上是可行的,因为许多应用都实现了开机自动启动后台Service的功能,同理开机启动Activity可以采用同样的方式。
原理就是系统开机后会发送一个开机广播,程序利用BroadcastReceiver捕捉该广播后再打开主界面。
具体实现方法:
一、实现自定义BroadcastReceiver捕捉开机广播
二、在AndroidManifest中注册该广播接收器
三、在AndroidManifest中设置权限
可以看出相当简单, 是不是这样写好后一定能行呢,我用小米2S进行了测试,发现不行,因为小米手机有一个自启动应用授权管理,经系统授权后才能得到自动启动的权限:
[img]http://dl2.iteye.com/upload/attachment/0105/4237/b232a0dd-2d70-3b00-812a-33fc35d3036e.png[/img]
手动添加自启动应用即可。
设置后再进行测试发现能实现自动启动该App应用主界面,但是效果与目标有一些差距。
因为手机启动后第一个打开的是锁屏界面,锁屏界面显示时,后台第二步会加载系统桌面,最后才会打开自启动应用,等于说用户需要手动解锁,如果桌面还未加载完成,首先看到的是系统桌面,如果已加载完,则会看到的是自启动应用界面。
如何去掉锁界面,网上也给出了答案,需要修改系统源码,所以完全实现体验比较好的开机自启动功能,修改源码是不可少的。
原理就是系统开机后会发送一个开机广播,程序利用BroadcastReceiver捕捉该广播后再打开主界面。
具体实现方法:
一、实现自定义BroadcastReceiver捕捉开机广播
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent intentMain = new Intent(context, MainActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentMain);
}
}
}
二、在AndroidManifest中注册该广播接收器
<receiver android:name="com.xxx.main.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
三、在AndroidManifest中设置权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
可以看出相当简单, 是不是这样写好后一定能行呢,我用小米2S进行了测试,发现不行,因为小米手机有一个自启动应用授权管理,经系统授权后才能得到自动启动的权限:
[img]http://dl2.iteye.com/upload/attachment/0105/4237/b232a0dd-2d70-3b00-812a-33fc35d3036e.png[/img]
手动添加自启动应用即可。
设置后再进行测试发现能实现自动启动该App应用主界面,但是效果与目标有一些差距。
因为手机启动后第一个打开的是锁屏界面,锁屏界面显示时,后台第二步会加载系统桌面,最后才会打开自启动应用,等于说用户需要手动解锁,如果桌面还未加载完成,首先看到的是系统桌面,如果已加载完,则会看到的是自启动应用界面。
如何去掉锁界面,网上也给出了答案,需要修改系统源码,所以完全实现体验比较好的开机自启动功能,修改源码是不可少的。