本文转载至:http://www.trinea.cn/android/android-boot_completed-not-work/


在这里记录下是为了备份知识。

本文主要介绍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状态,在这种状态下接收不到任何广播,除非广播带有FLAG_INCLUDE_STOPPED_PACKAGES标志,而默认所有系统广播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就没法通过系统广播自启动了。所以Android3.1之后
(1)、应用程序无法在安装后自己启动
(2)、没有ui的程序必须通过其他应用激活才能启动
,如它的Activity、Service、Content Provider被其他应用调用。
存在一种例外,就是应用程序被adb push you.apk /system/app/下是会自动启动的,不处于stopped状态。no broadcast receivedstopped state
具体说明见:
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. Android点滴(1):获取Android系统的唯一识别码
  2. Android命令行工具logcat详细用法!
  3. Android系统自带Spinner+Adapter基础
  4. Android Studio报错adb不是内部命令
  5. Android输入系统与Qwerty物理键盘的支持

随机推荐

  1. android 程序 发布加密
  2. Linearlayout和relativeLayout的属性的一
  3. Android中的单元测试
  4. Android2.2 API 中文文档系列(3) —— Acce
  5. android 邮件开发(javax.mail)
  6. Android SDK Android NDK Android Studio
  7. Android(安卓)init.rc文件简单介绍
  8. Android 初级(待续)
  9. android 环境搭建
  10. android中ListView拖动时背景黑色的问题