文档章节

android开机启动service

blackylin
 blackylin
发布于 2012/12/11 19:25
字数 249
阅读 4111
收藏 15

记录下用广播方式开机启动service或activity,当然还有一种在init.rc中注册服务,待下次研究O(∩_∩)O。

当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的 application必须具有捕获该广播的权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

 

1.Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.gsm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    
	<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
	<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
	<uses-permission android:name="android.permission.GET_TASKS"/>
	<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
	
    <application android:theme="@style/AppTheme">

        <service
            android:name=".GSMService"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.app.gsm.GSMService"></action>
            </intent-filter>
        </service>
        
        <receiver android:name="com.app.gsm.GSMServiceBootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
    </application>

</manifest>

2.GSMServiceBootReceiver.java

package com.app.gsm;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class GSMServiceBootReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Intent myIntent = new Intent();
		myIntent.setAction("com.app.gsm.GSMService");
		context.startService(myIntent);
	}
}

 

补充说明:这种做法在android3.1之后貌似行不通了,详情看评论里O(∩_∩)O~

© 著作权归作者所有

共有 人打赏支持
blackylin
粉丝 48
博文 47
码字总数 27860
作品 0
深圳
Android工程师
私信 提问
加载中

评论(10)

阿More
阿More
mark~~学习
chenzz
chenzz
正需要这个,看看...
谢均
谢均

引用来自“thearyong”的评论

引用来自“谢均”的评论

我也遇到这样的问题,怎么才能在4.0以后的机上收到开机广播,或者可以用什么广播来代替,

1.按@chongzi09 的解释,你可以手动启动一次,然后就可以接受到广播了,这是android3.1之后为了防止恶意apk默认启动的加的限制
2.但毕竟上面的有限制,你可以把这个应用弄成系统级的,放到/system/app下面,这样就可以接受到广播
3.如果是个service,你需要保证他不被挂掉,就算挂掉了立刻让他起来,可以在AndroidManifest.xml 中加上android:persistent="true":
<application android:icon="@drawable/icon" android:label="@string/app_name" android:persistent="true">
这样可以保证它一直运行

嗯,谢谢你的回复
blackylin
blackylin

引用来自“谢均”的评论

我也遇到这样的问题,怎么才能在4.0以后的机上收到开机广播,或者可以用什么广播来代替,

1.按@chongzi09 的解释,你可以手动启动一次,然后就可以接受到广播了,这是android3.1之后为了防止恶意apk默认启动的加的限制
2.但毕竟上面的有限制,你可以把这个应用弄成系统级的,放到/system/app下面,这样就可以接受到广播
3.如果是个service,你需要保证他不被挂掉,就算挂掉了立刻让他起来,可以在AndroidManifest.xml 中加上android:persistent="true":
<application android:icon="@drawable/icon" android:label="@string/app_name" android:persistent="true">
这样可以保证它一直运行
谢均
谢均
我也遇到这样的问题,怎么才能在4.0以后的机上收到开机广播,或者可以用什么广播来代替,
chongzi09
chongzi09

引用来自“blackylin”的评论

引用来自“chongzi09”的评论

如果改程序之前没有启动过,该方法在3.0以上版本是行不通的,ACTION_BOOT_COMPLETED 只会发送给已经启动过的软件。

3.0以上版本我没有验证过,望贴下经验给大家学习下O(∩_∩)O
这里没有太理解你的意思:
1.service本来就是为了等着开机发送ACTION_BOOT_COMPLETED,捕获后才启动service,何谈启动过的软件?
2.并且这个是个广播吧,广播大家应该都收的到,为什么只给启动过的发送,既然启动过了,再发有什么意义?

最简单的例子就是第三方预装到手机里面的APP,你拿到手机后并没有打开某个APP,这个APP是接受不到ACTION_BOOT_COMPLETED 广播,当你打开过一次该APP后,下次该APP就可以接受到ACTION_BOOT_COMPLETED 广播了。因为3.0以上对APP添加了一个是否已启动的属性,该属性只能被系统更改。
chongzi09
chongzi09

引用来自“灵松”的评论

收藏

最简单的例子就是第三方预装到手机里面的APP,你拿到手机后并没有打开某个APP,这个APP是接受不到ACTION_BOOT_COMPLETED 广播,当你打开过一次该APP后,下次该APP就可以接受到ACTION_BOOT_COMPLETED 广播了。因为3.0以上对APP添加了一个是否已启动的属性,该属性只能被系统更改。
灵松
灵松
收藏
blackylin
blackylin

引用来自“chongzi09”的评论

如果改程序之前没有启动过,该方法在3.0以上版本是行不通的,ACTION_BOOT_COMPLETED 只会发送给已经启动过的软件。

3.0以上版本我没有验证过,望贴下经验给大家学习下O(∩_∩)O
这里没有太理解你的意思:
1.service本来就是为了等着开机发送ACTION_BOOT_COMPLETED,捕获后才启动service,何谈启动过的软件?
2.并且这个是个广播吧,广播大家应该都收的到,为什么只给启动过的发送,既然启动过了,再发有什么意义?
chongzi09
chongzi09
如果改程序之前没有启动过,该方法在3.0以上版本是行不通的,ACTION_BOOT_COMPLETED 只会发送给已经启动过的软件。
Android应用是否可以只有一个Service或Broadcast Reciver,而没有Activity?

作者:chenjieb520 Service是android四大组件中与Activity最相似的组件,都可以代表可执行的程序。 Service与Activity的区别在于: (1)、Service一直在后台运行,没有用户界面。 (2)、一旦...

晨曦之光
2012/03/14
8.3K
3
android实现开机启动服务

开机启动服务的关键点是,当android启动完毕后,android会广播一次android.intent.action.BOOT_COMPLETED。如果想在启动后执行自己的代码,需要编写一个广播的接收者,并且注册接收者到这个广...

鉴客
2012/02/15
870
1
Android开机启动Activity或者Service方法

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

天下杰论
2014/03/25
0
0
[Android] Android开机启动Activity或者Service方法

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

枫兮兮
2014/03/03
0
0
Android电池电量监控初步

引言 ,学习了包括Activity、Service、AppWidget、Broadcast、Intent、Notification、XML布局、XML配置等基础知识之后,尝试着做一个小玩意儿——电池监控,期间也是阻挠多多,现在基本完成了...

鉴客
2012/01/29
3.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

Python中判断字符串是否包含中文

Python import reRE = re.compile(u'[\u4e00-\u9fa5]', re.UNICODE)match = re.search(RE, str)if match is None:# 没有包含中文字符 参考 Python regular expressions return true/f......

亚林瓜子
6分钟前
0
0
《CNCF × Alibaba 云原生技术公开课》正式首播

《CNCF × Alibaba 云原生技术公开课》立即观看:点击立即观看 云原生最初来描述云上应用的典型架构与特性,随着容器、Kubernetes、Serverless、FaaS技术的演进,CNCF(云原生计算基金会)把...

mcy0425
6分钟前
0
0
网站漏洞如何修复网站程序问题

jeecms 最近被爆出高危网站漏洞,可以导致网站被上传webshell木马文件,受影响的版本是jeecms V6.0版本到jeecmsV7.0版本。该网站系统采用的是JAVA语言开发,数据库使用的是oracle,mysql,sql数...

网站安全
9分钟前
0
0
git 中“warning: CRLF will be replaced by LF in”解决方案

https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important...

qwfys
14分钟前
0
0
Spring Boot配置ssl证书启用HTTPS协议

一 、点睛 SSL是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议和各种应用层协议之间,为数据通信提供安全支持。 SSL协议分为两...

故久呵呵
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部