2017-11-10 7 views
1

FCM 메시지는 data, notification 또는 둘 모두 중 하나 일 수 있습니다. notification을 사용하여 시스템에서 생성하는 알림에는 기능이 없으므로 notification을 삭제하고 data 만 보냈습니다. 따라서 직접 알림을 만들어야합니다.FirebaseMessagingService는 백그라운드 일 때만 알림 표시

알림을 생성하고 표시하는 것은 쉬웠지만 내 앱 (특히 MainActivity가 하나의 활동 만 가지고 있음)이 이미 포 그라운드에있을 때 알림을 표시하고 싶지 않습니다. 대부분의 앱은 포 그라운드에있을 때 알림을 표시하지 않습니다.

내 앱이 포 그라운드가 아닌 경우 onMessageReceived에서 어떻게 알 수 있습니까? 응용 프로그램 전경 또는 backroudn에있는 경우

class MessagingService : FirebaseMessagingService() 
{ 
    override fun onMessageReceived(remoteMessage: RemoteMessage?) 
    { 
     // Check if message contains a data payload. 
     if (remoteMessage?.data?.isNotEmpty() == true) 
     { 
      //Log.d(TAG, "Message data payload: " + remoteMessage.data) 

      ...... 

      if "Only when my app is on the background or not running?" 
       sendNotification("Got a message.") 
     } 
    } 
+0

당신은 ** Application.ActivityLifecycleCallbacks이 **하는 당신이 감지 할 수 구현할 수 있습니다 –

답변

1
/** 
* Method checks if the app is in background or not 
* 
* @param context Application context 
* @return True/False 
*/ 
public static boolean isAppIsInBackground(Context context) { 
    boolean isInBackground = true; 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { 
     List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
     for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
      if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
       for (String activeProcess : processInfo.pkgList) { 
        if (activeProcess.equals(context.getPackageName())) { 
         isInBackground = false; 
        } 
       } 
      } 
     } 
    } else { 
     List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
     ComponentName componentInfo = taskInfo.get(0).topActivity; 
     if (componentInfo.getPackageName().equals(context.getPackageName())) { 
      isInBackground = false; 
     } 
    } 

    return isInBackground; 
}