暮鼓集    行走集

原作于2014年01月28日

在开发Android行业应用过程中,常会要求App在系统开机时可以自动启动。这里,我将实现方法和遇到的一些问题总结于下文。

一. 实现

继承一个BroadcastReceiver用来处理BOOT_COMPLETED广播消息

public class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        String action = intent.getAction().toString();        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {  ...        }    }}

在AndroidManifest.xml中注册

               

二. 不能自动启动的原因

  1. AndroidManifest.xml中BOOT_COMPLETED部分不正确,或者缺少必要的uses-permission。

  2. 应用安装到了sd卡内,安装在sd卡内的应用不能收到BOOT_COMPLETED。

  3. 系统开启了Fast Boot模式,这种模式下系统启动不会发送BOOT_COMPLETED。

  4. 应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。

所有,有些应用只有Background Service,而不包括任何Activity,是不能启动的。

Android3.1之后,系统为了加强了安全性控制,应用程序安装后或是(设置)应用管理中被强制关闭后处于Stopped状态,在这种状态下接收不到任何广播,直到被启动过(用户打开或是其他应用调用)才会脱离这种状态。要注意,如果用户在应用管理器中Force Stop,则应用又会回到Stopped状态。

但是应用程序作为系统App,被安装在/system/app/下是会自动启动的,不处于stopped状态。

三. 对应用程序进行测试

可以使用如下命令发送BOOT_COMPLETED。

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

而不用重启测试机或模拟器来测试BOOT_COMPLETED广播,这条命令可以更精确的发送到某个package,如下:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name

参考

http://developer.android.com/about/versions/android-3.1.html#launchcontrols http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html http://www.trinea.cn/android/android-boot_completed-not-work/

更多相关文章

  1. 下载、编译、运行android 7.1系统
  2. 通过程序打开Android常用系统设置界面
  3. Android 编译系统之Android.bp
  4. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
  5. 防止android应用程序无响应ANR(Application Not Responding)
  6. Android调用系统相机和相册,解决图片方向问题,压缩图片
  7. 使用代理下载android系统源码和SDK
  8. android定制状态栏
  9. Android-标题状态栏的隐藏

随机推荐

  1. 什么是aidl?Android(安卓)AIDL详解
  2. android 绘图
  3. Android(安卓)Camera OMXCameraAdapter.c
  4. Android(安卓)开发必读:如何成为一名优秀
  5. android学习(1)——TextView属性
  6. 我的android 第27天 - Intent意图
  7. android eclipse集成环境
  8. android 读写文件
  9. Android总Activity的启动模式分为四种
  10. Android系列教程之四:Activity的生命周期