| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package com.YuyeTech.HeartRate;
- import android.app.Activity;
- import android.app.admin.DevicePolicyManager;
- import android.content.ComponentName;
- import android.content.Context;
- import android.util.Log;
- import android.view.WindowManager;
- import com.ble.mylockview.admin.KioskDeviceAdminReceiver;
- /**
- * Kiosk 辅助类 - 提供禁用锁屏、屏幕常亮等功能
- * Created on 2026/1/22.
- */
- public class KioskHelper {
-
- private static final String TAG = "KioskHelper";
-
- /**
- * 仅用 Context 禁用锁屏(Device Owner 时生效)。
- * 用于在 Application 或 BootReceiver 中尽早调用,避免开机自启时处于锁屏阶段导致
- * 输入法(IME)无法挂载或显示、被 Keyguard 层级遮挡的问题。
- * 调用时机:Application.onCreate() 或 BOOT_COMPLETED/LOCKED_BOOT_COMPLETED 收到时。
- */
- public static void disableKeyguardIfOwner(Context context) {
- if (context == null) {
- Log.w(TAG, "Context is null, cannot disable keyguard");
- return;
- }
- try {
- Context app = context.getApplicationContext();
- DevicePolicyManager dpm = (DevicePolicyManager)
- app.getSystemService(Context.DEVICE_POLICY_SERVICE);
- ComponentName adminComponent = new ComponentName(app, KioskDeviceAdminReceiver.class);
- if (dpm != null && dpm.isDeviceOwnerApp(app.getPackageName())) {
- dpm.setKeyguardDisabled(adminComponent, true);
- Log.d(TAG, "✅ 锁屏已禁用(Application/开机阶段)");
- }
- } catch (Exception e) {
- Log.e(TAG, "disableKeyguardIfOwner 失败", e);
- }
- }
-
- /**
- * 禁用锁屏和解锁屏幕(在 Activity 创建时调用)
- */
- public static void disableLockScreen(Activity activity) {
- if (activity == null) {
- Log.w(TAG, "Activity is null, cannot disable lock screen");
- return;
- }
-
- try {
- // 1. 解锁屏幕(如果当前是锁定状态)
- activity.getWindow().addFlags(
- WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
- WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
- WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
- );
-
- // 2. 作为 Device Owner 禁用锁屏
- DevicePolicyManager dpm = (DevicePolicyManager)
- activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
- ComponentName adminComponent = new ComponentName(
- activity,
- KioskDeviceAdminReceiver.class
- );
-
- if (dpm != null && dpm.isDeviceOwnerApp(activity.getPackageName())) {
- // 禁用键盘锁(锁屏)
- dpm.setKeyguardDisabled(adminComponent, true);
- Log.d(TAG, "✅ 锁屏已禁用");
- } else {
- Log.w(TAG, "⚠️ 不是 Device Owner,无法禁用锁屏");
- }
-
- } catch (Exception e) {
- Log.e(TAG, "禁用锁屏失败", e);
- }
- }
-
- /**
- * 保持屏幕常亮(常亮会加大耗电,临时方案下不调用)
- */
- public static void keepScreenOn(Activity activity) {
- if (activity == null) {
- Log.w(TAG, "Activity is null, cannot keep screen on");
- return;
- }
-
- try {
- activity.getWindow().addFlags(
- WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
- );
- Log.d(TAG, "✅ 屏幕保持常亮");
- } catch (Exception e) {
- Log.e(TAG, "设置屏幕常亮失败", e);
- }
- }
-
- /**
- * 不设置常亮:清除 FLAG_KEEP_SCREEN_ON,由系统休眠时间(如 50 分钟)控制息屏,降低耗电。
- * 临时方案:在 Pad 系统设置中提前设置休眠时间(如 50 分钟),再安装运行 App。
- */
- public static void clearKeepScreenOn(Activity activity) {
- if (activity == null) {
- Log.w(TAG, "Activity is null, cannot clear keep screen on");
- return;
- }
- try {
- activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- Log.d(TAG, "✅ 已关闭常亮,跟随系统休眠时间");
- } catch (Exception e) {
- Log.e(TAG, "清除常亮标志失败", e);
- }
- }
-
- /**
- * 启用锁屏(恢复系统默认行为)
- */
- public static void enableLockScreen(Activity activity) {
- if (activity == null) {
- Log.w(TAG, "Activity is null, cannot enable lock screen");
- return;
- }
-
- try {
- DevicePolicyManager dpm = (DevicePolicyManager)
- activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
- ComponentName adminComponent = new ComponentName(
- activity,
- KioskDeviceAdminReceiver.class
- );
-
- if (dpm != null && dpm.isDeviceOwnerApp(activity.getPackageName())) {
- dpm.setKeyguardDisabled(adminComponent, false);
- Log.d(TAG, "✅ 锁屏已启用");
- }
-
- } catch (Exception e) {
- Log.e(TAG, "启用锁屏失败", e);
- }
- }
- }
|