Android亮灭屏功能实现
16lz
2022-03-05
首先介绍一下思路,先通过系统提供的可管理和操作设备的类DevicePolicyManager,进行权限激活,然后实现系统亮灭屏控制。
具体实现代码如下:
package com.jxd.jxdtest.screenonandoff;import android.app.admin.DeviceAdminReceiver;import android.app.admin.DevicePolicyManager;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.PowerManager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.jxd.jxdtest.R;public class ScreenOnAndOffActivity extends AppCompatActivity { private Button screenOnOffBtn = null; private DevicePolicyManager devicePolicyManager = null; private ComponentName screenReceiver = null; private static final int SCREEN_OFF = 0; private static final int SCREEN_ON = 1; private PowerManager powerManager = null; private PowerManager.WakeLock wakeLock; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case SCREEN_OFF: turnOffScreen(); handler.sendEmptyMessageDelayed(SCREEN_ON,2000); break; case SCREEN_ON: turnOnScreen(); handler.sendEmptyMessageDelayed(SCREEN_OFF,2000); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_screen_on_and_off); screenOnOffBtn = findViewById(R.id.screen_on_off); screenOnOffBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean hasPermission = devicePolicyManager.isAdminActive(screenReceiver); if (hasPermission) { turnOffScreen(); handler.sendEmptyMessageDelayed(SCREEN_ON,1000); } else { Toast.makeText(ScreenOnAndOffActivity.this,"无设备管理权限", Toast.LENGTH_LONG).show(); } } }); screenReceiver = new ComponentName(ScreenOnAndOffActivity.this, ScreenOnAndOffReceiver.class); powerManager = (PowerManager) getSystemService(POWER_SERVICE); devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, screenReceiver); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"使用亮灭屏功能"); startActivityForResult(intent, 0); } private void turnOnScreen() { wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, ScreenOnAndOffActivity.class.getSimpleName()); wakeLock.acquire(); wakeLock.release(); } private void turnOffScreen(){ devicePolicyManager.lockNow(); } public class ScreenOnAndOffReceiver extends DeviceAdminReceiver { private ScreenOnAndOffReceiver() { } 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, "设备管理器禁用"); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); isOpen(); } private void isOpen() { if(devicePolicyManager.isAdminActive(screenReceiver)){ Toast.makeText(ScreenOnAndOffActivity.this,"设备已被激活", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(ScreenOnAndOffActivity.this,"设备没有被激活", Toast.LENGTH_LONG).show(); } }}
所需权限为:
screen_on_off.xml
<?xml version="1.0" encoding="utf-8"?>
更多相关文章
- Android无法真正睡眠:服务广播插件等仍激活消耗CPU造成耗电快
- 获取Android设备唯一标识(唯一序列号)
- Android(安卓)访问权限设置
- Android访问权限大全
- android camera(三):camera V4L2 FIMC
- Android的CTS测试
- Android系统权限和root权限
- Android(安卓)解决APN无权限问题
- android 权限介绍(一)