android开机启动Service(小发现)
来源:互联网 发布:耐克淘宝旗舰店正吗 编辑:程序博客网 时间:2024/04/30 12:51
最近在做一个关于Android系统上的监控程序,开机启动,开机启动代码是网上找的,也就是注册一个广播和Activity,然后用Activity启动Service就可以了,但是我想让这个程序没有界面,而且在桌面没有图标显示,然后我想当然的用Service来代替开机启动Activity,然后就出现了很诡异的事情:因为我第一次是用Activity唤醒的Service,发现启动的相当顺利,然后我把Activity直接注释掉,用eclipse的run as重新运安装,改用广播唤醒Sevice,开机之后Service程序也能顺利的执行,但是如果先卸载Android程序再安装注释了Activity的程序的话,Service是不会被广播启动的,在网上找了答案,原因是android系统版本的原因,说android4.0之后广播机制改了,从来没有运行过的Android程序是不能接收任何广播的。这句话我没法在4.0之前的手机上验证,但是我已经确定我的Androd4.0.3版本如果没有运行过的话,是不会收到开机广播的。
问题:
Android4.0.3版本上运行开机启动Sevice程序,不能启动。
解决思路:
让程序启动一次,然后就可以接受开机广播了。
解决办法:
因为这个是一个无桌面图标的程序。所以让它启动的时候会无法发现他已经安装到设备上了。可以在“设置”->"应用"看到应用已经安装上了。也可以在日志里查看,因为它和有Activity的程序启动是不一样的。我采用的是无线adb调试。
有Activity时Console安装打印信息如下
[2015-10-12 17:05:03 - monitor] Android Launch!
[2015-10-12 17:05:03 - monitor] adb is running normally.
[2015-10-12 17:05:03 - monitor] Performing net.langwei.monitor.Monitor activity launch
[2015-10-12 17:05:03 - monitor] Automatic Target Mode: using device '192.168.18.132:5555'
[2015-10-12 17:05:03 - monitor] Uploading monitor.apk onto device '192.168.18.132:5555'
[2015-10-12 17:05:03 - monitor] Installing monitor.apk...
[2015-10-12 17:05:05 - monitor] Success!
[2015-10-12 17:05:05 - monitor] Starting activity xxx.xxxxxxx.monitor.Monitor on device 192.168.18.132:5555
[2015-10-12 17:05:06 - monitor] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=xxx.xxxxxxx.monitor/.Monitor }
无Activity时Console安装打印信息如下
[2015-10-12 16:56:44 - monitor] Android Launch!
[2015-10-12 16:56:44 - monitor] adb is running normally.
[2015-10-12 16:56:44 - monitor] No Launcher activity found!
[2015-10-12 16:56:44 - monitor] The launch will only sync the application package on the device!
[2015-10-12 16:56:44 - monitor] Performing sync
[2015-10-12 16:56:44 - monitor] Automatic Target Mode: using device '192.168.18.132:5555'
[2015-10-12 16:56:46 - monitor] Uploading monitor.apk onto device '192.168.18.132:5555'
[2015-10-12 16:56:46 - monitor] Installing monitor.apk...
[2015-10-12 16:56:48 - monitor] Success!
[2015-10-12 16:56:48 - monitor] \monitor\bin\monitor.apk installed on device
[2015-10-12 16:56:48 - monitor] Done!
[2015-10-12 17:05:02 - monitor] Dx
1、这个方法是偶然发现的,也就是让Activity先启动一次Service,然后在AndroidManifest.xml文件中注释掉Activity,然后在run as重新安装一遍。这样就可以接收开机广播了。可能eclipse的run as功能是将原来的版本替换,并不是卸载之后安装。
2、采用am命令启动一次Service,这样就可以不用写Activity启动Service再注释掉Activity了。具体用法am startservice -n xxx.xxxxxxx.xxxxxxx/.MonitorService。xxx.xxxxxxx.xxxxxxx是包名,采用am启动Service的时候可能会出现Error: Requires permission not exported from uid 10080这种信息,这时候你就需要在你的AndroidManifest.xml标签中增加一个android:exported="true"可以被别的进程访问。或者你自己升级到root权限也可以am启动Service。
- android开机启动Service(小发现)
- Android开机启动Service
- Android开机启动Service
- Android开机启动Service
- 【Android】开机启动 Service
- android开机启动Service
- Android 开机启动Service
- Android activity/service 开机启动
- 【Android】开机自启动Service
- 【Android】开机自启动Service
- 【Android】开机自启动Service .
- Android 开机启动的service
- Android Service 开机自启动
- 【Android】开机自启动Service
- android开机自启动service
- android开机自启动,service
- Android中开机启动service
- android 开机自启动:启动activity、service
- 顺序表
- 每天一个linux命令(33):df 命令
- 8位CRC 数据校验
- pod install速度慢 解决方案
- 一张表格让你掌握深圳无人机供应链
- android开机启动Service(小发现)
- Impala006-impala 数据处理&impala 和 HBase整合&JDBC方式访问Impala
- spring boot 起步-原型实例
- 第4周项目3单链表应用(1)
- cf#305-D. Mike and Feet- 单调栈/ (线段树上二分)
- C++ Builder 利用Rtti访问对象中的字段值
- 第七周项目(1):建立顺序环形队列算法库
- MVC,MVP 和 MVVM 的图示区别
- 能挣钱的微信JSSDK+H5混合开发