W mojej aplikacji mam powiadomienie push zintegrowane z GCM
. Działa dobrze, gdy pojawia się powiadomienie. Ale powiadomienia push przychodzą nawet wtedy, gdy użytkownik znajduje się w aplikacji. Chcę, aby powiadomienia były wyświetlane tylko wtedy, gdy użytkownik znajduje się poza aplikacją.Pokaż powiadomienie push tylko wtedy, gdy aplikacja nie działa na Androidzie
Oto mój kod do powiadomienia 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());
}
}
W 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" />
Wszelkie sugestie będą bardzo mile widziane !!!
byłaś dodany zgodę na ? –
Amit
Masz kontrolę nad tym, co pokazywać lub pokazywać, aby nie wyświetlać się w powiadomieniach. Trzeba tylko znaleźć aplikację na pierwszym planie. Ten link SO omawia o tym. Po prostu to sprawdź. http://stackoverflow.com/questions/5504632/how-can-i-tell-if-android-app-is-running-in-the-foreground –
@Amit Dodałem wszystkie uprawnienia w pliku manifestu. to tylko działa – John