Android 实现屏幕的亮屏与锁屏

最近做的电子班牌需要早上7点开启,晚上8点关闭的功能,之前倒是没有接触过这类的东西,所以早上研究了一上午,赶紧记录下来

第一步:先申请权限

<!-- 屏幕唤醒 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 屏幕熄灭 -->
<uses-permission android:name="android.permission.DEVICE_POWER" />

第二步:注册监听,为了激活设备管理器

<receiver
    android:name="com.test.service.ScreenOffAdminReceiver"
    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>

其中的values/xml文件如下所示:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <reset-password />
        <force-lock />
    </uses-policies>
</device-admin>

监听的类:

public class ScreenOffAdminReceiver extends DeviceAdminReceiver {
    private void showToast(Context context, String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context,
                "设备管理器激活成功");
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context,
                "设备管理器激活失败");
    }
}

第三步:进入程序启动设备管理器激活

/**
 * @param view 检测并去激活设备管理器权限
 */
public void checkAndTurnOnDeviceManager(View view) {
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "开启后就可以使用锁屏功能了...");
    startActivityForResult(intent, 0);
}

在此之前,要在程序先初始化几个对象:

componentName = new ComponentName(this, ScreenOffAdminReceiver.class);
mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

这样用DevicePolicyManager去锁屏,用PowerManager去亮屏,用componentName去设置设备管理器权限

第四步:调用亮屏或者锁屏方法

/**
 * @param view 亮屏
 */
public void checkScreenOn(View view) {
    mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
    mWakeLock.acquire();
    mWakeLock.release();
}

/**
 * @param view 熄屏
 */
public void checkScreenOff(View view) {
    boolean admin = policyManager.isAdminActive(componentName);
    if (admin) {
        policyManager.lockNow();
    } else {
        Toast.makeText(this, "没有设备管理权限", Toast.LENGTH_SHORT).show();
    }
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            checkScreenOn(null);
        }
    }, 10 * 1000);
}

大概就是这样,今天也是刚实现,具体里面还是有点不太明白,记录一下,感谢这位大神,https://blog.csdn.net/u014614038/article/details/80430764

猜你喜欢

转载自blog.csdn.net/BetterMez/article/details/82589262