// 监听熄屏和亮屏需要添加权限
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
public class PowerScreenReceiver extends BroadcastReceiver {
private static final String TAG = "PowerScreenReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
Log.i(TAG, "receive screen off");
} else if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
Log.i(TAG, "receive screen on");
}
}
}
// 需要使用动态注册才能接收到广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
PowerScreenReceiver receiver = new PowerScreenReceiver();
registerReceiver(receiver, intentFilter);
// 屏幕主动唤醒,在普通的应用apk中调用可能无效,在实际项目开发系统apk时能正常唤醒待机状态的TV屏幕
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean isScreenOn;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
isScreenOn = powerManager.isInteractive();
} else {
isScreenOn = powerManager.isScreenOn();
}
if (!isScreenOn) {
@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = powerManager.newWakeLock(
PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "wakeupScreen");
if (wakeLock != null) {
wakeLock.acquire(1000);
wakeLock.release();
}
}
// 手动进入待机,同样只有系统apk有效
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
try {
powerManager.getClass().getMethod("goToSleep", long.class).invoke(powerManager, SystemClock.uptimeMillis());
} catch (Exception e) {
e.printStackTrace();
}
Android 监听屏幕熄屏亮屏和主动唤醒屏幕
最新推荐文章于 2023-05-25 11:39:44 发布