You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android应用中通过编程方式启用应用固定功能?

如何通过编程激活Android应用固定(屏幕固定)功能

嘿,这个问题问到点子上了!确实从Android 5.0(API 21)开始引入了应用固定(App Pinning,也叫屏幕固定)功能,能帮你避免应用被系统轻易杀死,而且确实可以通过编程触发,但有重要的前提限制。

核心前提:你的应用得是「设备所有者」或「配置文件所有者」

系统出于安全考虑,普通第三方应用是不能直接调用这个功能的——不然恶意应用随便把自己固定在屏幕上,用户就没法操作别的了。只有当你的应用成为设备所有者应用或者配置文件所有者应用时,才能触发屏幕固定。

具体实现步骤

  1. 创建设备管理员接收器
    你需要先定义一个继承自DeviceAdminReceiver的子类,用来处理设备管理相关的回调:

    public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
        // 这里可以重写必要的回调方法,比如onEnabled、onDisabled等
    }
    

    然后在AndroidManifest.xml里注册这个接收器,添加对应的权限和元数据:

    <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
    
    <receiver
        android:name=".MyDeviceAdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin" />
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
    </receiver>
    

    还要在res/xml目录下创建device_admin.xml文件,声明设备管理员的权限:

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <lock-task /> <!-- 必须声明这个权限才能使用屏幕固定 -->
        </uses-policies>
    </device-admin>
    
  2. 将应用设置为设备所有者
    你需要通过ADB命令来授予应用设备所有者权限(这一步没法完全通过应用内代码完成,因为是系统级权限):

    adb shell dpm set-device-owner com.your.package.name/.MyDeviceAdminReceiver
    

    注意:执行这个命令前,设备上不能有已添加的用户(除了主用户),否则会失败。

  3. 编程触发屏幕固定
    当你的应用已经是设备所有者,并且当前Activity处于前台时,就可以调用startLockTask()方法来激活屏幕固定:

    // 先检查是否支持屏幕固定,以及是否已经是设备所有者
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName adminComponent = new ComponentName(this, MyDeviceAdminReceiver.class);
        
        if (dpm.isDeviceOwnerApp(getPackageName()) && dpm.isLockTaskPermitted(getPackageName())) {
            startLockTask();
            // 此时应用已被固定,用户只能在这个应用内操作,除非触发退出逻辑
        }
    }
    
  4. 退出屏幕固定
    你可以在应用内调用stopLockTask()来主动退出固定:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        stopLockTask();
    }
    

    用户也可以通过系统组合键退出(通常是按住「返回键+主页键」,不同品牌设备可能有差异)。

重要注意事项

  • 屏幕固定状态下,系统会限制用户的操作,比如无法切换应用、打开通知栏(部分设备可能允许有限操作),所以一定要确保你的应用提供了合理的退出路径。
  • 如果你的应用不是设备/配置文件所有者,只能引导用户手动开启屏幕固定(通过系统设置或者最近任务界面的固定按钮),没法通过代码触发。

内容的提问来源于stack exchange,提问作者Ofek Regev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:18