Android实现对系统的休眠和唤醒操作
系统签名
为了能通过APP代码实现对Android系统的休眠和唤醒操作,需要添加系统签名
android:sharedUserId="android.uid.system"
休眠
fun goToSleep(): Boolean {
val pm = getSystemService(POWER_SERVICE) as PowerManager
try {
val method: Method = pm.javaClass.getMethod("goToSleep", java.lang.Long.TYPE)
method.invoke(pm, SystemClock.uptimeMillis())
return true
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
return false
}
唤醒
@SuppressLint("InvalidWakeLockTag")
fun wakeUp(){
Log.d("唤醒","")
val pm = getSystemService(POWER_SERVICE) as PowerManager
val wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_DIM_WAKE_LOCK, "bright")
wakeLock.acquire()
}
广播监听屏幕休眠和唤醒
AndroidManifest.xml
<receiver android:name="com.xx.boardcast.ScreenStatusReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON"></action>
<action android:name="android.intent.action.SCREEN_OFF"></action>
</intent-filter>
</receiver>
BroadcastReceiver
public class ScreenStatusReceiver extends BroadcastReceiver {
String SCREEN_ON = "android.intent.action.SCREEN_ON";
String SCREEN_OFF = "android.intent.action.SCREEN_OFF";
@Override
public void onReceive(Context context, Intent intent) {
// 屏幕唤醒
if(SCREEN_ON.equals(intent.getAction())){
Log.e("屏幕唤醒", SCREEN_ON);
}
// 屏幕休眠
else if(SCREEN_OFF.equals(intent.getAction())){
Log.e("屏幕休眠-", SCREEN_OFF);
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
wakeLock.acquire();
}
}
}
注册广播
// 屏幕状态广播
val screenStatusReceiver: ScreenStatusReceiver
// 屏幕状态广播初始化
screenStatusReceiver = ScreenStatusReceiver()
val screenStatusIF = IntentFilter()
screenStatusIF.addAction(Intent.ACTION_SCREEN_ON)
screenStatusIF.addAction(Intent.ACTION_SCREEN_OFF)
// 注册
registerReceiver(screenStatusReceiver, screenStatusIF)