In Android application development, there are two primary approaches to monitor device screen status:
Method 1: Using PowerManager APIs
The PowerManager service provides direct methods to query screen state:
import android.os.Build;
import android.os.PowerManager;
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean screenAwake;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
screenAwake = powerManager.isInteractive();
} else {
screenAwake = powerManager.isScreenOn();
}
This approach offers immediate status checking at any point in your application lifecycle.
Method 2: Broadcast Receiver Registration
For real-time monitoring, register reecivers for system broadcast intents:
private void setupDisplayListener() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
DisplayStateReceiver receiver = new DisplayStateReceiver();
registerReceiver(receiver, intentFilter);
}
private class DisplayStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String receivedAction = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(receivedAction)) {
handleScreenActivation();
} else if (Intent.ACTION_SCREEN_OFF.equals(receivedAction)) {
handleScreenDeactivation();
}
}
}
Complete Implementation Example
package com.example.screenmonitor;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ScreenMonitorActivity extends AppCompatActivity {
private static final String LOG_TAG = "ScreenMonitor";
private DisplayStateReceiver displayReceiver;
private TextView statusDisplay;
private StringBuilder statusLog = new StringBuilder();
private StringBuilder lifecycleLog = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
statusDisplay = findViewById(R.id.status_view);
queryCurrentScreenState();
initializeDisplayListener();
logLifecycleEvent("onCreate");
}
private void queryCurrentScreenState() {
PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isActive;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
isActive = powerMgr.isInteractive();
} else {
isActive = powerMgr.isScreenOn();
}
updateStatusDisplay(isActive ? "ACTIVE" : "INACTIVE");
}
private void initializeDisplayListener() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
displayReceiver = new DisplayStateReceiver();
registerReceiver(displayReceiver, filter);
}
private class DisplayStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) {
updateStatusDisplay("ACTIVATED");
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
updateStatusDisplay("DEACTIVATED");
}
}
}
private String getCurrentTimestamp() {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
return formatter.format(new Date());
}
private void logLifecycleEvent(String event) {
String timestamp = getCurrentTimestamp();
lifecycleLog.append(String.format("[%s] %s: %s\n", timestamp, "Activity", event));
}
private void updateStatusDisplay(String state) {
String timestamp = getCurrentTimestamp();
statusLog.append(String.format("[%s] Display Status: %s\n", timestamp, state));
statusDisplay.setText(statusLog.toString());
}
}
Execution Output
[20:00:09:591] Display Status: ACTIVE
[20:00:09:594] Activity: onCreate
[20:00:09:603] Activity: onStart
[20:00:09:606] Activity: onResume
[20:00:16:793] Activity: onPause
[20:00:16:850] Activity: onStop
[20:00:17:795] Display Status: DEACTIVATED
[20:00:18:564] Display Status: ACTIVATED
[20:00:20:536] Activity: onRestart
[20:00:20:543] Activity: onStart
[20:00:20:552] Activity: onResume
[20:00:26:360] Activity: onPause
[20:00:26:393] Activity: onStop
[20:00:27:570] Display Status: DEACTIVATED