From: http://www.trinea.cn/android/android-boot_completed-not-work/comment-page-1/#comment-122


Android应用如何开机自启动、自启动失败原因

本文主要介绍Android应用如何开机自启动、自启动失败的原因、adb命令发送BOOT_COMPLETED
问题:应用程序是否可以在安装后自启动,没有ui的纯service应用如何启动?答案马上揭晓^_*
1、Android应用如何开机自启动
(1)、在AndroidManifest.xml中注册

AndroidManifest.xml中注册BOOT_COMPLETED Action

注意不仅要添加android.intent.action.BOOT_COMPLETED对应的action,还需要添加对应的uses-permission

(2)、Receiver接收广播进行处理

Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class BootBroadcastReceiver extends BroadcastReceiver { public static final String TAG = "BootBroadcastReceiver" ; @Override public void onReceive ( Context context , Intent intent ) { String action = intent . getAction ( ) . toString ( ) ; if ( action . equals ( Intent . ACTION_BOOT_COMPLETED ) ) { // u can start your service here Toast . makeText ( context , "boot completed action has got" , Toast . LENGTH_LONG ) . show ( ) ; return ; } } }

2、自启动失败的原因
接收不到BOOT_COMPLETED广播可能的原因
(1)、BOOT_COMPLETED对应的action和uses-permission没有一起添加
(2)、应用安装到了sd卡内,安装在sd卡内的应用是收不到BOOT_COMPLETED广播的
(3)、系统开启了Fast Boot模式,这种模式下系统启动并不会发送BOOT_COMPLETED广播
(4)、应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。
Android3.1之后,系统为了加强了安全性控制,应用程序安装后或是(设置)应用管理中被强制关闭后处于stopped状态,在这种状态下接收不到任何广播。直到被启动过(用户打开或是其他应用调用)才会脱离这种状态,所以Android3.1之后
(1)、应用程序无法在安装后自己启动
(2)、没有ui的程序必须通过其他应用激活才能启动
,如它的Activity、Service、Content Provider被其他应用调用。
存在一种例外,就是应用程序被adb push you.apk /system/app/下是会自动启动的,不处于stopped状态。
具体说明见:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols
http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html

3、adb发送BOOT_COMPLETED
我们可以通过

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

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

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

更多相关文章

  1. maps开发遇到的 libcore.io.GaiException: getaddrinfo failed:
  2. Google Play 商店删除百度的两个Android应用程序
  3. Android应用程序进程启动源码解析
  4. 四步搞定Android(安卓)SDK环境
  5. Android(安卓)编程:calledfromWrongThreadException 的原因
  6. 学习之Android运行原理
  7. 开发前奏曲之添加Android(安卓)SDK平台工具
  8. Activity组件的启动过程
  9. 控制Android应用权限的五种方法

随机推荐

  1. 面试官问我,Redis分布式锁如何续期?懵了。
  2. java小白到架构师技术图谱(整理全网,持续更
  3. 教程资源汇总(已更新)
  4. 一次StackOverflowError排查,原因竟然和Du
  5. 你的程序出现了bug?这几款JVM工具也许可以
  6. React Async Rendering
  7. React 16.3新API
  8. 第2年
  9. 我们到底该如何学习数据结构与算法
  10. 为你Springboot项目自定义一个通用的异常