Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397310
  • 博文数量: 78
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:39
文章分类

全部博文(78)

文章存档

2016年(7)

2015年(1)

2014年(35)

2013年(35)

我的朋友

分类: Android平台

2014-12-10 15:05:44

 

1.       Android应用如何开机自启动

1.1. AndroidManifest.xml中注册android.intent.action.BOOT_COMPLETED"

      

            

                android.intent.action.BOOT_COMPLETED" />

                 

            

        

并添加对应的uses-permission:

 android.permission.RECEIVE_BOOT_COMPLETED" />

1.2. Receiver接收广播进行处理

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)) {

// do something.such as,start your service here

return;

}

}

}

2.       自启动失败的原因

接收不到BOOT_COMPLETED广播可能的原因

2.1. BOOT_COMPLETED对应的actionuses-permission没有一起添加

2.2. 应用安装到了sd卡内,安装在sd卡内的应用是收不到BOOT_COMPLETED广播的

2.3. 系统开启了Fast Boot模式,这种模式下系统启动并不会发送BOOT_COMPLETED广播

2.4. 应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播,包括BOOT_COMPLETEDACTION_PACKAGE_ADDEDCONNECTIVITY_ACTION等等。Android3.1之后,系统为了加强了安全性控制,应用程序安装后或是(设置)应用管理中被强制关闭后处于stopped状态,在这种状态下接收不到任何广播,除非广播带有FLAG_INCLUDE_STOPPED_PACKAGES标志,而默认所有系统广播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就没法通过系统广播自启动了。

android 3.1中安装了但是从来没有启动过的apk,或者被用户在程序管理里面force stop了的apk,叫做stopped packageboot_complete广播是无法将启动的。

注: /system/app下面的apk都是非 stopped package

所以Android3.1之后,应用程序无法在安装后自己启动;没有ui的程序必须通过其他应用激活才能启动,如它的ActivityServiceContent Provider被其他应用调用。存在一种例外,就是应用程序被adb push you.apk /system/app/下是会自动启动的,不处于stopped状态。安装应用后,启动一次该应用,那么下次开机就能收到BOOT_COMPLETED广播。

3.       adb发送BOOT_COMPLETED
我们可以通过adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

命令发送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

 转载资料:

阅读(3038) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~