Android 自启动

近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。
先说说我的项目需求:要求app一直运行,通过指令进行自动安装并在安装成功后自动开启。行业人事都了解,非root权限不可能无声无息的完成此要求。我分两步完成了此功能开发。今天记录一下root权限下实现静默安装app。
本文通过监听系统广播的方式,实现静默安装后的自启动。

简单介绍一下相关广播

ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
ACTION_PACKAGE_REPLACED 一个新版本的应用安装到设备,替换之前已经存在的版本
ACTION_PACKAGE_CHANGED  一个已存在的应用程序包已经改变,包括包名
ACTION_PACKAGE_REMOVED  一个已存在的应用程序包已经从设备上移除,包括包名(正在被安装的包程序不能接收到这个广播)
ACTION_PACKAGE_RESTARTED    用户重新开始一个包,包的所有进程将被杀死,所有与其联系的运行时间状态应该被移除,包括包名(重新开始包程序不能接收到这个广播)
ACTION_PACKAGE_DATA_CLEARED 用户已经清楚一个包的数据,包括包名(清除包程序不能接收到这个广播)
 

自定义广播

// 自定义广播
class BootService : BroadcastReceiver(){
    override fun onReceive(p0: Context?, p1: Intent?) {
        p1?.let {
            val action = it.action
            when(action){
                Intent.ACTION_PACKAGE_REPLACED,Intent.ACTION_PACKAGE_REPLACED ->{
                    p0?.let {
                        con -> {
                        // 启动app
                            val intent = con.packageManager.getLaunchIntentForPackage(con.packageName)
                            intent?.flags= Intent.FLAG_ACTIVITY_NEW_TASK
                            con.startActivity(intent)
                        }
                    }
                }
                else -> {

                }
            }
        }
    }
}

注册自定义的广播

<receiver
            android:name="com.zhujing.nadedemospace.BootService"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="10000">
                <!--监听开机-->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <!--监听关机-->
                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
                <action android:name="android.intent.action.REBOOT" />
            </intent-filter>
            <intent-filter>
                <!--监听安装、更新、卸载-->
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <!--固定格式,注意:package为固定内容,不可修改!!!-->
                <data android:scheme="package" />
            </intent-filter>
        </receiver>

到此就完成了。注意
1、com.zhujing.nadedemospace.BootService,最好使用全路径注册,以防自定义广播注册失败!!!
2、 <data android:scheme="package" /> package是固定内容,不可修改!!!

静默安装相关内容更新完毕,欢迎各位同学指导……

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,当设备启动自动启动应用程序是可能的。要实现这一点,需要在应用程序的清单文件(AndroidManifest.xml)中添加一个接收BOOT_COMPLETED广播的接收器。 首先,在清单文件中添加以下权限: ```xml <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> ``` 接下来,添加一个接收器,以接收BOOT_COMPLETED广播并在设备启动成后启动应用程序: ```xml <receiver android:name=".BootCompletedReceiver" android:enabled="true" android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> ``` 然后,在应用程序中创建一个BootCompletedReceiver类,继承自BroadcastReceiver: ```java public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { // 在这里启动你的应用程序 Intent appIntent = new Intent(context, YourMainActivity.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } } } ``` 这个接收器将接收到设备启动成的广播,并在onReceive()方法中启动你的应用程序的主活动(YourMainActivity.class)。 最后,重新编译和部署你的应用程序。现在,每次设备启动成后,你的应用程序都会自动启动。 以上是通过在Android清单文件中添加一个接收BOOT_COMPLETED广播的接收器来实现Android自动启动应用程序的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值