首先介绍一下思路,先通过系统提供的可管理和操作设备的类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"?>                                                

 

更多相关文章

  1. Android无法真正睡眠:服务广播插件等仍激活消耗CPU造成耗电快
  2. 获取Android设备唯一标识(唯一序列号)
  3. Android(安卓)访问权限设置
  4. Android访问权限大全
  5. android camera(三):camera V4L2 FIMC
  6. Android的CTS测试
  7. Android系统权限和root权限
  8. Android(安卓)解决APN无权限问题
  9. android 权限介绍(一)

随机推荐

  1. SQLSERVER的中文排序规则
  2. 为什么我不能在Windows 7专业64位SP1上安
  3. Red Hat5下源码安装mysql5.6过程记录
  4. 如何编写这个SQL查询?
  5. 使用Clustered ColumnStore Index插入唯
  6. 数据库sql及索引优化
  7. [置顶] sql server中对日期字段值
  8. SQLSERVER2005调试存储过程跟函数
  9. 烂泥:Wing FTP Server与mysql数据库整合
  10. 【手撸一个ORM】第七步、SqlDataReader转