Как проверить приложение на переднем плане от службы?
Мне нужно показать уведомление пользователю только в том случае, если приложение не находится на переднем плане. Вот мой открытый класс MyFirebaseMessagingService extends
FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if(applicationInForeground()) {
Map<String, String> data = remoteMessage.getData();
sendNotification(data.get("title"), data.get("detail"));
}
}
необходимо реализовать метод applicationInForeground()
Ответы
Ответ 1
Вы можете контролировать запущенные процессы приложения из системной службы Android. Попробуй это:
private boolean applicationInForeground() {
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> services = activityManager.getRunningAppProcesses();
boolean isActivityFound = false;
if (services.get(0).processName
.equalsIgnoreCase(getPackageName()) && services.get(0).importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
isActivityFound = true;
}
return isActivityFound;
}
Удачи.
Ответ 2
В Google I/O 2016 я поговорил, где одна из тем: Firebase определяет, находится ли ваше приложение в на переднем плане. Вы можете использовать ActivityLifecycleCallbacks для этого, увеличивая счетчик для каждого действия в вашем приложении, которое запускается, а затем уменьшает его для каждого действия, которое прекращается, Если счетчик равен > 1, ваше приложение находится на переднем плане. Соответствующую часть разговора можно увидеть на YouTube здесь.
Ответ 3
Вы также можете попробовать использовать компоненты жизненного цикла Android.
public class AppFirebaseMessagingService extends FirebaseMessagingService implements LifecycleObserver {
private boolean isAppInForeground;
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@Override
public void onDestroy() {
super.onDestroy();
ProcessLifecycleOwner.get().getLifecycle().removeObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onForegroundStart() {
isAppInForeground = true;
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onForegroundStop() {
isAppInForeground = false;
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if(isAppInForeground) {
// do foreground stuff on your activities
} else {
// send a notification
}
}
}