赞
踩
工作需要搞一个工业平板的开机自启动实现,最终搞定,记录在此。
在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播)
1.在应用源码里的AndroidManifest.xml
添加如下内容
- package="com.example.test" //填自己应用的包名,涉及到包名的地方都修改一下
- android:sharedUserId="android.uid.system">
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <receiver android:name="com.example.test.myReceiver" >
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </receiver>
2.上面的myReceiver是需要你自己写的类,继承了BroadcastReceiver的,代码如下:
- public class MyReceiver extends BroadcastReceiver
- {
-
- @Override
- public void onReceive(Context context, Intent intent)
- {
- if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
- {
- Intent i = new Intent(context, MainActivity.class);//填你需要自启动的主页面名称
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(i);
- }
- }
- }
3.安装app到手机上,然后启动一次程序(据说安卓4.0以后,必须先启动一次程序才能接收到开机完成的广播,目的是防止恶意程序)
备注:如果你的安卓有开机自启动管理设置,请先去设置里打开你要自启的app的权限,允许它开机自启动。
参考来源:android实现程序开机自启动 - jetereting - 博客园
做到这里的时候,我去尝试了几次重启都没有成功。后来又搜索了是不是要root权限,但是我开启了root权限还是不行。最终的解决如下:
安卓需要这个两个文件:
有的安卓源码里可能有,参照上图的目录。我这个工业平板里没有,去相应的网站上下载这两个。
这里需要特别说明一下
如果使用的设备厂家没有对这个改动过,则使用google给的这两个就行了
地址如下:https://android.googlesource.com/platform/build/+/donut-release/target/product/security/
除此之外,还需要keytool工具
地址如下:https://github.com/getfatday/keytool-importkeypair
参考链接:Android中获取系统级权限(sharedUserId的使用以及INSTALL_FAILED_SHARED_USER_INCOMPATIBLE问题的解决) - 简书
参考这篇文章:AndroidStudio 配置系统签名 - 简书
生成keystore文件
sh keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias system
基本上按照这篇文章来就行。
注意:上述命令没法直接在wins中直接执行,这个时候可以用git工具,在该工具所在的目录下,右键->git bash here,然后再执行即可生成签名文件。
注意:一定要版本要一致,要么选release要么选debug,查看你的Build Types就知道你选的是什么版本了。
在build.gradle文件中可手动添加下面内容:
- signingConfigs {
- debug {
- storeFile file('../signAPK/platform.keystore')
- storePassword 'android'
- keyPassword 'android'
- keyAlias 'system'
- v1SigningEnabled true
- v1SigningEnabled true
- }
- release {
- storeFile file('../signAPK/platform.keystore')
- storePassword 'android'
- keyPassword 'android'
- keyAlias 'system'
- v1SigningEnabled true
- v1SigningEnabled true
- }

或者在File->Project Structure->Modules->app->Signing Configs里自己设置,设置完后gradle文件里也会出现上述的配置代码。
基本按照这个做没有啥问题,如果还有,可以尝试rebuild或者clean。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。