android 定时熄屏
程序员文章站
2022-03-03 11:55:54
安卓机实现 一段时间无操作自动熄屏具体功能已实现,主要代码如下,欢迎留言分享~~~1.UI show_screen_layout.xml
安卓机实现 一段时间无操作自动熄屏
具体功能已实现,主要代码如下,欢迎留言分享~~~
1.UI show_screen_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/id_set_layout"
android:background="@color/bg_test"
android:orientation="vertical">
<include layout="@layout/status_bar"/>
<include layout="@layout/title_bar" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<RadioGroup
android:id="@+id/radiogroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_x="3px"
>
<!--无操作10分钟后休眠.-->
<RadioButton
android:id="@+id/id_screen_rest_box"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:background="@color/white"
android:text="@string/auto_rest_str"
android:textSize="23sp"
/>
<!--永不休眠.-->
<RadioButton
android:id="@+id/id_no_sleep_box"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="@string/no_sleep_str"
android:textSize="23sp"
/>
</RadioGroup>
</RelativeLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
2.AndroidManifest.xml 添加广播
设备管理器勾选app,激活
<!-- 设备管理 -->
<receiver android:name=".receiver.AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/lock_screen" />
<intent-filter>
<action
android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
- AdminReceiver
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
return super.getWho(context);
}
/**
* 禁用
*/
@Override
public void onDisabled(Context context, Intent intent) {
// Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();
super.onDisabled(context, intent);
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return super.onDisableRequested(context, intent);
}
/**
* 激活
*/
@Override
public void onEnabled(Context context, Intent intent) {
// Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();
super.onEnabled(context, intent);
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
super.onPasswordChanged(context, intent);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
super.onPasswordSucceeded(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
@Override
public IBinder peekService(Context myContext, Intent service) {
return super.peekService(myContext, service);
}
}
4.动态注册监控屏幕的广播,可以在onCreate()里添加
设备管理服务定义
private DevicePolicyManager policyManager;
private ComponentName componentName;
public DevicePolicyManager getDevicePolicyManager() {
return policyManager;
}
public ComponentName getComponentName() {
return componentName;
}
//获取设备管理服务
policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
//AdminReceiver 继承自 DeviceAdminReceiver
componentName = new ComponentName(this,AdminReceiver.class);
//动态注册监控屏幕的广播
IntentFilter mintentFilter = new IntentFilter();
mintentFilter.addAction("android.intent.action.SCREEN_ON");
mintentFilter.addAction("android.intent.action.SCREEN_OFF");
ScreenReceiver mscreenReceiver = new ScreenReceiver();
registerReceiver(mscreenReceiver,mintentFilter);
5.ScreenReceiver 熄屏亮屏监控
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.SCREEN_ON")) { //亮屏
if(MyApp.getInstance().isScreen()){
MyApp.getInstance().startAD();//计时
}
}
if (intent.getAction().equals("android.intent.action.SCREEN_OFF")) { // 熄屏
if(MyApp.getInstance().isScreen()){
MyApp.getInstance().handler1.removeCallbacks(MyApp.getInstance().runnable1);//取消计时
}
}
}
6.操作计时
//重写onTouch 方法
public class myOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 触摸
if(MyApp.getInstance().isScreen()){
MyApp.getInstance().handler1.removeCallbacks(MyApp.getInstance().runnable1);//取消计时
}
break;
case MotionEvent.ACTION_UP:
// 抬起
if(MyApp.getInstance().isScreen()){
MyApp.getInstance().startAD();
}
break;
}
return true;
}
}
7.
public Handler handler1 = new Handler();
private long time1=1000*60*10;//10分钟
public void startAD() {
handler1.removeCallbacks(runnable1);
handler1.postDelayed(runnable1, time1);
}
public Runnable runnable1 = new Runnable() {
@Override
public void run() {
// Log.d("MainActivity", "~~10分钟后无操作就熄屏~~");
lock();
}
};
8.可手动激活设备管理器权限 设置--安全--勾选app--激活
private void lock() {
boolean active = MyApp.getInstance().getDevicePolicyManager().isAdminActive(MyApp.getInstance().getComponentName());
if (!active) { // 若无权限
Log.d("lock", "~~没有权限~~");
// activeManage(); // 去获得权限
MyApp.getInstance().getDevicePolicyManager().lockNow(); // 并锁屏
} else {
Log.d("lock", "~~已经有权限~~");
MyApp.getInstance().getDevicePolicyManager().lockNow(); // 直接锁屏
}
}
9.调用
public void wifiClick() {
if(MyApp.getInstance().isScreen()){
MyApp.getInstance().handler1.removeCallbacks(MyApp.getInstance().runnable1);//取消计时
MyApp.getInstance().startAD();//计时
}
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);
}
本文地址:https://blog.csdn.net/weixin_46052306/article/details/107157062