处理GCM通知Android

时间:2015-06-26 18:56:02

标签: android android-intent notifications google-cloud-messaging android-notifications

我正在开发一个应用程序,它会收到GCM通知,提醒用户有关促销和类似内容的信息。

到目前为止,我已设法发送和接收通知。这是我的代码:

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

}

public class GCMNotificationIntentService extends IntentService {
public static final int notifyID = 1337;
NotificationCompat.Builder builder;

public GCMNotificationIntentService() {
    super("GcmIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

    String messageType = gcm.getMessageType(intent);
    if (!extras.isEmpty()) {
       sendNotification(extras.getString("type"),extras.getString("msg"));
    }
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}

private void sendNotification(String type, String msg) {
    Intent resultIntent = new Intent(this, SplashActivity.class);
    resultIntent.putExtra("type", type);
    resultIntent.putExtra("msg", msg);

    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0,resultIntent, PendingIntent.FLAG_ONE_SHOT);

    NotificationCompat.Builder mNotifyBuilder;
    NotificationManager mNotificationManager;

    mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    mNotifyBuilder = new NotificationCompat.Builder(this)      
            .setContentTitle("x")
            .setContentText(msg)
            .setSmallIcon(R.drawable.ic_launcher);
    mNotifyBuilder.setContentIntent(resultPendingIntent);

    int defaults = 0;
    defaults = defaults | Notification.DEFAULT_LIGHTS;
    defaults = defaults | Notification.DEFAULT_VIBRATE;
    defaults = defaults | Notification.DEFAULT_SOUND;

    mNotifyBuilder.setDefaults(defaults);
    mNotifyBuilder.setAutoCancel(true);
    mNotificationManager.notify(notifyID, mNotifyBuilder.build());
}

}

问题在于我不知道如何(或在何处)显示消息提醒。

在网上搜索,我找到了一个实现,即使应用程序关闭也会显示消息,但我只需要在应用程序上显示消息,例如:应用程序打开时或应用程序关闭时然后用户打开它。

1 个答案:

答案 0 :(得分:0)

Android通知框架旨在显示通知,无论您的应用是否已打开。通知显示在顶部的通知栏中,不会显示在您的活动屏幕中。

如果您不希望在应用程序未运行时显示通知,则可以执行类似于变量isRunning的操作,并在活动的onResume()中将其设置为true,在活动的onPause()中将其设置为false。这样,您现在可以参考以确定应用程序是否正在运行。如果isRunning为false,那么您可以将在后台接收的通知保存到SharedPreferences或数据库中 - 您将在不使用Notification框架的情况下执行此操作。如果应用程序处于打开状态,那么您可以显示消息警报 - 如果您打算使用Notification框架或使用AlertDialog,则可以显示消息警告。