Показывать push-уведомление только тогда, когда приложение не работает.

В моем приложении у меня есть push-уведомление, интегрированное с GCM . Его работа прекрасна всякий раз, когда появляется уведомление. Но push-уведомление приходит даже тогда, когда пользователь находится внутри приложения. Я хочу, чтобы уведомления отображались только в том случае, если пользователь находится вне приложения.

Вот мой код для push-уведомления:

GcmBroadcastReceiver

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ComponentName comp = new ComponentName(GCMNotificationIntentService.class.getPackage().getName(), GCMNotificationIntentService.class.getName()); startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

GCMnotificationIntentService.Class

 public class GCMNotificationIntentService extends IntentService { public static int notificationId = 10; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; private boolean login_status = false; public GCMNotificationIntentService() { super("GcmIntentService"); } public static final String TAG = GCMNotificationIntentService.class.getSimpleName(); @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); // The getMessageType() intent parameter must be the intent you received // in your BroadcastReceiver. String messageType = gcm.getMessageType(intent); if ( !extras.isEmpty() ) { // has effect of unparcelling Bundle /* * Filter messages based on message type. Since it is likely that * GCM will be extended in the future with new message types, just * ignore any message types you're not interested in, or that you * don't recognize. */ if ( GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType) ) { sendNotification("Send error: " + extras.toString()); } else if ( GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType) ) { sendNotification("Deleted messages on server: " + extras.toString()); // If it's a regular GCM message, do some work. } else if ( GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType) ) { sendNotification(extras.getString("message")); Log.i(TAG, "Received: " + extras.toString()); } } // Release the wake lock provided by the WakefulBroadcastReceiver. GcmBroadcastReceiver.completeWakefulIntent(intent); } private void sendNotification(String msg) { mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher) .setContentTitle(getString(R.string.notification_title)) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg); Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); mBuilder.setSound(uri); mBuilder.setContentIntent(contentIntent); mBuilder.setAutoCancel(true); mNotificationManager.notify(notificationId++, mBuilder.build()); } } 

В ManifestFile

  <receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.medlife.deliveryagent" /> </intent-filter> </receiver> <service android:name=".GCMNotificationIntentService" /> 

Любые предложения были бы высоко оценены !!!

Сделайте что-нибудь подобное, чтобы проверить, находится ли приложение на переднем плане или нет, вызывая метод ниже и в зависимости от возвращаемого значения true или false выполняйте остаток работы

 public boolean checkApp(){ ActivityManager am = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE); // get the info from the currently running task List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).topActivity; if (componentInfo.getPackageName().equalsIgnoreCase("YourPackage")) { return true; } else { return false; } }