Android自启动注意事项

在做Android开发时,很多应用由于各种目的,希望在机器启动时被唤醒,一般的做法是写一个BroadcastReceiver,接收对应的boot action,当然别忘了在Manifest中添加permission "android.permission.RECEIVE_BOOT_COMPLETED“。但是最近在做4.0开发时,有同事声称这个广播接收不到了,同时其他有人又说自己的能接收到,到底是怎么回事呢。

原来,在3.1之后,系统的package manager增加了对处于“stopped state”应用的管理,这个stopped和Activity生命周期中的stop状态是完全两码事,指的是安装后从来没有启动过和被用户手动强制停止的应用,与此同时系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES ,来标识一个intent是否激活处于“stopped state”的应用。当2个Flag都不设置或者都进行设置的时候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。

有了上面的新机制之后,google觉得给所有的广播intent默认加上FLAG_EXCLUDE_STOPPED_PACKAGES会非常的Cooooool,能在一定程度上避免流氓软件、病毒啊干坏事,还能提高效率,就导致了本文题目中说的问题,RECEIVE_BOOT_COMPLETED广播如果用户没有运行过应用,就不会响应了。

不过google还是留了点余地,允许应用和后台服务通过给广播intent设置FLAG_INCLUDE_STOPPED_PACKAGES来唤醒处于“stopped state”的程序,也就是用户自己写的广播intent可以控制这个机制,但是系统自带的广播intent,由于不能修改,就只能接受这个现实了。

解决方案:定制系统,修改framework,把系统发bootcompleteIntent的地方改一下,在intent里设上FLAG_EXCLUDE_STOPPED_PACKAGES,那样在这个系统里,你的APP就可以开机启动了.

时间: 2024-12-21 04:29:16

Android自启动注意事项的相关文章

android ListView注意事项

所有问题,都是自己遇到过的. 但内容,有一半是自己写的,也有一半是复制过来. 所以,写成原创还请原谅 1. ListView添加标题后(addHeader())后,使用listView.getAdapter获取的对像是被Header封装后的HeaderViewListAdapter对像.所以,为了获取自定义Adapter,方法为: HeaderViewListAdapter adapter=(HeaderViewListAdapter)dayBillListView.getAdapter();

关于Android自启动和启动多个进程

1.自启动 需要获取自启动权限: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 这个权限在4.0以后必须需要.否则无法获取到广播. 然后我们在广播中获取这个通知,然后进行相应的操作: 1 package com.example.com.mac.bootdeme; 2 3 import android.app.Service; 4 import android.cont

Android自启动应用添加

本篇介绍Android开机自动启动应用的开发过程. 1:添加自启动权限 在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 2:添加自启动接收,决定用哪个BroadcastReceiver作为应用入口 在AndroidManifest.xml添加入口 <receiver android:name="com.z

Android -- Fragment注意事项

ViewPager+Fragment 让Fragment成为ViewPager的一页时,FragmentManager会一直保存管理创建好了的Fragment,即使当前不是显示的这一页,Fragment对象也不会被销毁,在后台默默等待重新显示.但如果Fragment不再可见时,它的视图层次会被销毁掉,下次显示时视图会重新创建. 出于使用FragmentPagerAdapter  时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter

Android自启动

好久没写博客了,手都生疏了,词不达意之处,望请见谅.... 首先说明一个大家都知道的事情,那么就是陌陌.微信.QQ等应用,在安装的时候,在安装界面就出自动选中“自启动”这项,因此针对这个功能,我进行了非常蛋疼的研究,不管我是如何注册开机自启动的权限,都无法达到这种效果,因此非常郁闷... 最终无奈之下,我选择了将自己的Demo的包名分别换成了微信.陌陌两个应用的包名,打包安装,居然出现了如上图所示的功能,因此推测例如小米.魅族等手机的操作系统,应该有一个白名单,在这个名单中的应用,可以实现上述功

Android 多线程注意事项

参考:http://blog.csdn.net/x86android/article/details/14161981 http://geeksun.iteye.com/blog/1447708 Android中的线程 在Android平台中多线程应用很广泛,在UI更新.游戏开发和耗时处理(网络通信等)等方面都需要多线程.Android线程涉及的技术有:Handler;Message;MessageQueue;Looper;HandlerThread. 有一点要非常注意的,就是在写这个多线程代码

Android Studio在线安装Android SDK注意事项

由于使用的Android studio自带了sdk23,然而其它版本的sdk并没有安装:这些天由于需要用到低版本的sdk,因而使用Android SDK Manager进行相应的更新.开始的时候老是无法下载,首先想到的是被墙了.于是 File-->Settings-->Appearance & Behavior-->System Settings-->HTTP Proxy中进行了相应代理的设置 设置完以后,Check connection 此时,按常理来说Android S

关于开发android注意的事项

1.做android开发应该同时有2个版本(开发测试版本.正式版本); 开发版本用作程序员自己开发及交由测试人员进行测试.正式版本正式上线版本. 2.用第三方包要写签名,正式版本要求填写项目生成的KEY,测试版本用自带的KEY. 3.公司项目使用bitbucket,个人的可以使用github等. 4.查看签名keytool -list -v -keystore ××××(签名文件) 5.默认签名相关信息: Keystore name: “debug.keystore” Keystore pass

android环境注意事项

这两天一直在配置环境问题,我总结出一个方法就是(不懂的地方一定要好好查百度谷哥,千万别蒙混过关,因为开始的时候会遇到好多问题)出现了如下问题: 在安装eclipse的时候,我发现我不清楚选择哪个版本的开发工具,后来选择了luna这个版本来进行开发,同时我发现外国人对这个版本命名的方法就是用人名来区分的.一张图就知道什么情况了. 但是在网上查询之后,eclipse的版本最后是选择juno和indigo这两个版本比较好,因为越是大的版本相反他对电脑的配置要求也是很高的.所以,建议不升级eclipse