Android开机启动程序
2015-10-11 13:10
525 查看
android程序实现开机启动的原理,简单点说就是做一个广播接收器,接收到开机广播时就启动activity或service或执行其它操作。Android系统在启动的时候会发出一个开机广播,内容为ACTION_BOOT_COMPLETED,我们写一个接收器,每当接收到这个广播的时候,就说明是刚开机,然后启动需要开机启动的程序就行了。具体步骤: 第一步,新建BootBroadcastReciever.java,继承BroadcastReceiver,
public class BootBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*如果接收到开机广播*/
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
//这里执行开机启动的操作,比如启动activity或service
}
}
}
如果是启动一个activity,假如要启动MainActivity,则if语句块里这么写:
Intent newIntent = new Intent(context, MainActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //这个标记必须加
context.startActivity(newIntent); 如果是启动一个service,假如要启动MainService,则if语句块里这么写: context.startService(new Intent(context, MainService.class)); //这句也可拆成两句写 注意:activity和service都要在Manifest.xml里面注册
第二步,在Manifest里面注册上面的广播接收器 BootBroadcastReciever
<receiver android:name=".BootBroadcastReciever" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.DATA_STATE" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
</intent-filter>
</receiver>
注意:网上其它教材在filter中都只写了<action android:name="android.intent.action.BOOT_COMPLETED" />这一句,这句表示申明接收开机广播的权限。有的教材可能会多加<category android:name="android.intent.category.Home" />这个category标签,我不知道这个 是什么意思,不过貌似和开机启动无关,删了也没问题。至于
<action android:name="android.intent.action.DATA_STATE" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
这两句,是保证在4.0的系统中开机启动的服务被用户在“管理应用程序”里面给强行停止后,下次开机时服务依然能自启动,如果没这两句,用户强行停止某项开机启动的服务后,下次开机时该服务就不会自动启动了。
第三步,在Manifest.xml中注册监听开机广播的权限 在Manifest.xml中添加 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 这一步在有的教程里面没提到,这个好像是新版本的sdk中才需要这样写,旧版本(通常指api 11一下)的就不需要这一步了,具体我也不清楚,反正多了这一步更保险。
public class BootBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*如果接收到开机广播*/
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
//这里执行开机启动的操作,比如启动activity或service
}
}
}
如果是启动一个activity,假如要启动MainActivity,则if语句块里这么写:
Intent newIntent = new Intent(context, MainActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //这个标记必须加
context.startActivity(newIntent); 如果是启动一个service,假如要启动MainService,则if语句块里这么写: context.startService(new Intent(context, MainService.class)); //这句也可拆成两句写 注意:activity和service都要在Manifest.xml里面注册
第二步,在Manifest里面注册上面的广播接收器 BootBroadcastReciever
<receiver android:name=".BootBroadcastReciever" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.DATA_STATE" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
</intent-filter>
</receiver>
注意:网上其它教材在filter中都只写了<action android:name="android.intent.action.BOOT_COMPLETED" />这一句,这句表示申明接收开机广播的权限。有的教材可能会多加<category android:name="android.intent.category.Home" />这个category标签,我不知道这个 是什么意思,不过貌似和开机启动无关,删了也没问题。至于
<action android:name="android.intent.action.DATA_STATE" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
这两句,是保证在4.0的系统中开机启动的服务被用户在“管理应用程序”里面给强行停止后,下次开机时服务依然能自启动,如果没这两句,用户强行停止某项开机启动的服务后,下次开机时该服务就不会自动启动了。
第三步,在Manifest.xml中注册监听开机广播的权限 在Manifest.xml中添加 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 这一步在有的教程里面没提到,这个好像是新版本的sdk中才需要这样写,旧版本(通常指api 11一下)的就不需要这一步了,具体我也不清楚,反正多了这一步更保险。
相关文章推荐
- Android IOS WebRTC 音视频开发总结(四五)-- ORTC背后的真相
- 在Android5.0系统上加载位于SD卡上的本地动态库
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- 日报2015/10/11(极客学院安卓视频学习)
- Android系统Framework层源码调试
- android学习:新浪微博Outh2授权,21322错误
- Android实现播放视频
- Android之如何成为Android高手
- [Android自定义控件]Android中如何用代码写出优美的Button
- Android Api Demos登顶之路(九十四)Graphics-->Xfermodes
- Android 5.0动画(一)
- android--(BroadcastReceiver)
- Android中NavigationDrawer的分析
- Android Fragment的生命周期和返回栈(转)
- Android ViewPager多页面滑动切换以及动画效果
- Android应用程序注册广播接收器(registerReceiver)的过程分析
- Android Tab切换表格头
- Android 各类功能效果源代码集合
- 启动avd manager的时候,提示“系统找不到指定文件”的一种解决办法
- Android listview与adapter用法