安卓开机自启动app

前言

工作需要搞一个工业平板的开机自启动实现,最终搞定,记录在此。

初次探索

在安卓中,想要实现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权限还是不行。最终的解决如下:

最终实现

1.关键点:开机自启动 apk 需要系统签名

安卓需要这个两个文件:

有的安卓源码里可能有,参照上图的目录。我这个工业平板里没有,去相应的网站上下载这两个。

这里需要特别说明一下

如果使用的设备厂家没有对这个改动过,则使用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问题的解决) - 简书

2.生成签名文件

参考这篇文章:AndroidStudio 配置系统签名 - 简书

生成keystore文件

  • 将keytool-importkeypair、platform.pk8和platform.x509.pem文件放在同一个目录下,执行如下命令,会生成platform.keystore文件:
sh keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias system
  • -p 表示新生成的keystore的密码是什么,这里为android,可以自己随便设置,但是请记住!后面要用。
  • -pk8 表示要导入的pk8文件的名称,可以包括路径,pk8文件用来保存private key的,是个私钥文件。
  • -cert 表示要导入的证书文件,和pk8文件在同一个目录,pem这种文件就是一个.x509的数字证书,里面有用户的公钥等信息,是用来解密的,这种文件格式里面不仅可以存储数字证书,还能存各种key。(有兴趣的可以点击此了解一下
  • -alias 表示给生成的platform.keystore取一个别名,这个名字只有我们在签名的时候才用的到,这里我们生成的文件名是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。

  • 28
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值