在 UniApp 离线 Android 工程中,实现 Kiosk 模式功能(禁用锁屏、防退出等)无需通过 JS 调用,应用启动时自动激活。
通过自定义 Application 类,在应用启动时自动注册 Activity 生命周期监听,当主 Activity 创建时自动调用 Kiosk 相关功能。
app/src/main/java/com/YuyeTech/HeartRate/MyApplication.javaDCloudApplication(保持 UniApp 功能)PandoraEntry/PandoraEntryActivity 创建时自动初始化 Kioskapp/src/main/java/com/YuyeTech/HeartRate/KioskHelper.javadisableLockScreen(Activity) - 禁用锁屏keepScreenOn(Activity) - 屏幕常亮enableLockScreen(Activity) - 恢复锁屏com.YuyeTech.HeartRate.MyApplicationapp/src/main/res/xml/device_admin.xml提供以下功能:
提供 WiFi 配置功能:
showWifiDialogView()应用启动
↓
MyApplication.onCreate()
↓
注册 ActivityLifecycleCallbacks
↓
PandoraEntry 创建
↓
onActivityCreated() 被触发
↓
判断是否为主 Activity
↓
KioskHelper.disableLockScreen(activity) ← ✅ 自动执行(无需 JS)
↓
KioskHelper.keepScreenOn(activity) ← ✅ 自动执行(无需 JS)
↓
KioskManager.attach(activity) ← ✅ 自动执行(无需 JS)
↓
进入 Kiosk 模式
<!-- 替换 Application -->
<application
android:name="com.YuyeTech.HeartRate.MyApplication" <!-- ← 改这里 -->
...>
<!-- 添加权限 -->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 添加 Device Admin Receiver -->
<receiver
android:name="com.ble.mylockview.admin.KioskDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN"
android:exported="true">
<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>
@Override
public void onCreate() {
super.onCreate();
// 配置 Kiosk
LaunchConfig.setLaunchActivity(PandoraEntry.class);
KioskManager.setDebug(BuildConfig.DEBUG);
// 注册生命周期监听
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
if (activity instanceof io.dcloud.PandoraEntry ||
activity instanceof io.dcloud.PandoraEntryActivity) {
// ✅ 自动禁用锁屏(无需 JS 调用)
KioskHelper.disableLockScreen(activity);
KioskHelper.keepScreenOn(activity);
// ✅ 自动绑定 KioskManager
KioskManager.attach(activity);
}
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
if (activity instanceof io.dcloud.PandoraEntry ||
activity instanceof io.dcloud.PandoraEntryActivity) {
KioskManager.onResume();
}
}
// ... 其他生命周期回调
});
}
⚠️ 完整 Kiosk 功能需要 Device Owner 权限
# 1. 恢复出厂设置(移除所有账号)
# 2. 安装 APK
adb install app-release.apk
# 3. 设置为 Device Owner
adb shell dpm set-device-owner com.YuyeTech.HeartRate/com.ble.mylockview.admin.KioskDeviceAdminReceiver
# 4. 验证
adb shell dumpsys device_policy | grep "Device Owner"
# Debug 版本(宽松模式)
./gradlew assembleDebug
# Release 版本(严格模式)
./gradlew assembleRelease
# 查看日志
adb logcat | grep -E "MyApplication|KioskHelper|KioskManager"
# 期望看到:
# D MyApplication: Application 初始化
# D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntry
# D KioskHelper: ✅ 锁屏已禁用
# D KioskHelper: ✅ 屏幕保持常亮
# D KioskManager: ✅ LockTask 启用(一次)
| 功能 | Device Owner | 非 Device Owner |
|---|---|---|
| 自动初始化 | ✅ | ✅ |
| 屏幕常亮 | ✅ | ✅ |
| 全屏沉浸 | ✅ | ✅ |
| 禁用锁屏 | ✅ | ❌ |
| LockTask 模式 | ✅ | ❌ |
| 拦截 Home/Back | ✅ | ⚠️ 部分 |
| 五指逃生门 | ✅ | ✅ |
A: 应用可以运行,但 Kiosk 功能受限。需要按照"部署步骤"设置 Device Owner。
A:
dpm set-device-owner 命令A: 检查:
AndroidManifest.xml 中 Application 是否改为 MyApplication✅ 绑定 Kiosk 到: PandoraEntryA:
开发者:
adb shell am task lock stop
# 或
adb shell am force-stop com.YuyeTech.HeartRate
// myLockView/src/main/java/com/ble/mylockview/admin/KioskManager.java
private static final String ADMIN_PASSWORD = "您的新密码";
private static final int ADMIN_FINGER_COUNT = 5; // 手指数量
private static final long ADMIN_HOLD_TIME = 5000; // 长按时间(毫秒)
<!-- AndroidManifest.xml -->
<receiver
android:name="com.ble.mylockview.boot.BootReceiver"
android:enabled="false" <!-- 改为 false -->
...>
开发阶段:
BuildConfig.DEBUG = true)测试阶段:
生产部署:
查看详细日志:
adb logcat -v time | grep -E "KioskManager|MyApplication|KioskHelper|BootLauncher"
检查 Device Owner 状态:
adb shell dumpsys device_policy
移除 Device Owner(应急):
adb shell dpm remove-active-admin com.YuyeTech.HeartRate/com.ble.mylockview.admin.KioskDeviceAdminReceiver
创建时间:2026-01-22
适用版本:UniApp 离线打包 + Android 8.0+
核心优势:✅ 无需 JS 调用,应用启动自动激活 Kiosk 模式