Android 利用launcher(安卓系统UI桌面)实现开机自启动App

本文介绍了一种在安卓系统中实现App开机自启动的方法,通过在AndroidManifest中添加特定配置,使App作为launcher在开机时自动运行。适用于对开机自启动有需求但不希望提供用户界面的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

前段时间有这样一个需求,做一个安卓系统的小型服务器,使用的开发板是萤火虫的7.0.1系统,并且已经root了,网上有很多利用广播,通过监听开机广播的方式来,实现App的开机自启动,这个方法不做考虑,因为我就没有成功过。采用另一种方式来实现这个需求,也就是launcher。

什么是launcher

对于初级开发者来说launcher可能还有些陌生,它俗称“HomeScreen”也就是我们开机后看到的第一个App(其实也就是系统的桌面)。launcher其实就是一个app,它的作用用来显示和管理手机上其他App。目前市场上有很多第三方的launcher应用,比如“小米桌面”、“91桌面”等等。那我们就利用launcher来实现开机自启动App的需求吧。

开机自启动App开发

其实实现的方式非常的简单,我们只需要在我们的AndroidManifest中添加上两行代码即可。

<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />

也就是这样,

<application
        ...>
    <activity
        ...>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
         </intent-filter>
     </activity>
</application>

这样我们的需求就完成了,是不是很简单,在安装完成后重新启动我们的设备,系统就会让我们选择要打开系统的launcher还是我们自己的launcher。
这里写图片描述
选择始终以后每次开机就会启动自己的launcher APP,这样做是简单,但弊端是:用户如果卸载了这个APP或恢复出厂设置以后,那么就会启用系统的 launcher 。做不到防止修改的作用。但是我的需求是,不需要界面,也就是用户是不能对开发板就行安装和卸载的,所以在这里是比较适用的。

进一步的完善

怎么对我们的App做进一步的完善呢,一山不容二虎,当然是删除系统的launcher了,这样就可以做到比较完善的地步啦。

删除launcher的方式

  1. 第一种方式的话比较简单一些,就是将设备进行root操作,获取到root权限之后将系统的launcher进行卸载操作,弊端是,用户获取到root权限之后可以随意卸载App,包括咱们自己写的launcher,所以root有风险,一定要慎用啊。
  2. 第二种就是修改Android系统的源码,删除与系统launcher相关的文件。

如果有什么扩展的需求或者我有什么遗失和错误欢迎评论,我会第一时间回复和更新。

### Android APK 无桌面图标并实现开机广播接收 #### 1. 实现桌面图标 为了使应用程序在安装后不会显示桌面图标,可以通过移除 `LAUNCHER` 类别的意图过滤器来实现。通常情况下,在 `AndroidManifest.xml` 文件中定义的应用程序入口点会包含以下代码: ```xml <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> ``` 删除上述 `<category>` 中的 `android.intent.category.LAUNCHER` 部分即可隐藏应用图标[^1]。 修改后的代码如下所示: ```xml <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name"> <!-- 移除了 LAUNCHER category --> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> </application> ``` #### 2. 启动后台 Service 的方式 即使没有桌面图标,仍然可以启动一个后台服务。这可以通过创建一个不可见的 Activity 来间接启动 Service。具体做法是让该 Activity 不显示任何 UI,并在其生命周期方法(如 `onCreate()` 或 `onResume()`)中绑定或启动目标 Service。 以下是实现代码示例: ```java public class InvisibleActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 启动后台服务 Intent serviceIntent = new Intent(this, BackgroundService.class); startService(serviceIntent); // 结束当前活动 finish(); } } ``` 同时需要注册此 Activity 和 Service 到 Manifest 文件里: ```xml <activity android:name=".InvisibleActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> <service android:name=".BackgroundService"/> ``` #### 3. 接收开机广播原理及方法 当设备重启时,系统会发出一条名为 `BOOT_COMPLETED` 的广播消息。开发者可以让自己的 App 注册监听这条广播消息从而执行特定操作比如重新激活某些服务等。需要注意的是自 Android Oreo (API level 26) 起对于隐式广播有着更严格的限制因此可能还需要额外处理才能正常工作。 下面是一个简单的例子展示如何设置广播接收器去响应系统启动事件: ```java public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { // 当接收到 BOOT_COMPLETED 广播时启动服务或其他逻辑 Intent serviceIntent = new Intent(context, BackgroundService.class); ContextCompat.startForegroundService(context, serviceIntent); } } } ``` 记得也要更新 manifest 添加相应的权限以及声明广播接受者: ```xml <!-- 请求必要的权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".BootCompletedReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> ``` 以上就是关于安卓开发中去除桌面快捷方式的同时保持后台运行能力的技术探讨[^4]. ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值