Show push notification only when the application is not working with Android

In my application, I have a push notification integrated with GCM . His work is beautiful whenever a notification appears. But a push notification appears even when the user is inside the application. I want to see notifications only if the user is outside the application.

Here is my push notification code:

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 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()); } } 

In 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" /> 

Any suggestions would be highly appreciated.

+5
source share
1 answer

Do something similar to check if the application is in the foreground or not by calling the method below and depending on the return value true or false, do the rest of the work.

 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; } } 
+2
source

All Articles