文档章节

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

LiSteven
 LiSteven
发布于 2014/02/13 18:20
字数 659
阅读 1033
收藏 16

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

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;        }    } }

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状态。no broadcast received stopped 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
我们可以通过

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

1

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

1

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

 


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

LiSteven

LiSteven

粉丝 38
博文 268
码字总数 11616
作品 0
深圳
程序员
私信 提问
[Android] Android开机启动Activity或者Service方法

Android开机启动Activity或者Service方法 【原理】 当Android系统完成BOOT阶段之后,就会发送一条名为 ACTIONBOOTCOMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启...

枫兮兮
2014/03/03
59
0
android自启动服务,研究自用

1、开机自启动 2、系统服务(需要用到AIDL进行数据传输);拿到需求的第一步准备下手的是开机自启动。 一、开机自启动 这里要分三步走: 第一步:加入开机自启动权限 <uses-permission andro...

捍卫机密
2018/07/10
83
0
Android开机启动Activity或者Service方法

这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下...

天下杰论
2014/03/25
192
0
android7.0如何修改Launcher界面为自己定义的界面

最近新项目中有定制首次开机界面的需求,于是自己写了个应用,在主Activity的intent-filter中配置如下: 然后在AcitvityManagerService中的getHomeIntent中配置这个intent.addCategory("and...

yzwstc
2016/11/03
1K
1
关于android实现聊天: Service +BroadcastReceiver

平 常经常有一些Android爱好者问我Android服务有什么用,跟线程不是差不多吗,还有Service是继承Context 是不是跟Activity有相同的特性。还有经常在CSDN上也遇上好多朋友问到这样的问题,看到...

天下杰论
2013/01/06
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部