Android Studio Android应用KIOSK MODE检测到充电时打开显示屏

dgsult0t  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(217)

我正在开发平板电脑的应用程序,这是一个汽车导航。我需要做的是-如果司机打开汽车,平板电脑打开屏幕,如果汽车关闭,显示器关闭。我的第一个想法是保持平板电脑插入汽车充电器,如果检测到充电,打开显示器。如果没有检测到充电,关闭显示器。应用程序将在KIOSK模式下运行。屏幕关闭时检测充电状态的最佳方法是什么?

ijxebb2r

ijxebb2r1#

这很简单
首先,您需要监听充电状态的变化。这可以通过以下方式完成:

//Create receiver
BroadcastReceiver powerChangeReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        
        if(Intent.ACTION_POWER_CONNECTED.equals(action)){
            turnScreenOn();
        } else if(Intent.ACTION_POWER_DISCONNECTED.equals(action)){
            turnScreenOff();
        }

    }
};

//Register receiver
IntentFilter i = new IntentFilter();
i.addAction(Intent.ACTION_POWER_CONNECTED);
i.addAction(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(powerChangeReceiver, i);

现在您需要做的就是实现turnScreenOn()turnScreenOff()方法:

public void turnScreenOn(){
    runOnUiThread(() -> {
        PowerManager pm = (PowerManager) getApplicationContext().getSystemService(POWER_SERVICE);
        @SuppressWarnings("deprecation")
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
                PowerManager.ACQUIRE_CAUSES_WAKEUP, "example:tag");
        wl.acquire();
    });
}

public void turnScreenOff(){
    if(policyManager.isDeviceOwnerApp(getPackageName())) {
        runOnUiThread(() -> {
            policyManager.lockNow();
        });
    }
}

不要忘记向清单添加WAKE_LOCK权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

希望能有所帮助!

相关问题