解决方法是通过使用WakefulBroadcastReceiver来注册广播并请求唤醒锁定,以便在设备处于睡眠模式下将屏幕点亮。具体代码如下:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire(10*60*1000L /*10 minutes*/);
// Go to the activity that displays the message
Intent intent = new Intent(this, MessageActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message", messageBody);
startActivity(intent);
// ...
wakeLock.release();
}
}
public class MyWakefulReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
PowerManager.WakeLock wakeLock = ((PowerManager) context.getSystemService(POWER_SERVICE)).newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
// Release the lock when the service is done doing its work
Intent service = new Intent(context, MyFirebaseMessagingService.class);
startWakefulService(context, service);
wakeLock.release();
}
}