Android通知onTap:根据条件

时间:2015-12-16 10:27:39

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

如果应用程序已登录并位于前台,则在点击通知时,我只想让用户进行活动新闻。如果应用程序处于后台,则将其置于前台并转到 NEWS活动。如果应用程序未在后台启动,则显示 登录活动 ,然后在成功完全登录后将用户带到NEWS活动

使用我的测试代码,如果用户未登录,我可以将用户带到新闻活动,而不是登录活动!

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

final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, NewsActivity.class), 0);

final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle(this.getApplicationContext().getString(R.string.app_name))
    .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg);

mBuilder.setContentIntent(contentIntent);
mBuilder.setAutoCancel(true);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

从其他线程我开始知道我们不应该使用 ActivityManager.getRunningTasks 来检查应用是否在前台!是否在onResume和onPause上设置标志以检查app是否在前台是唯一可用的最佳方式?

2 个答案:

答案 0 :(得分:2)

您可以使用某些单例实例来保存用户状态。

final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, createIntent(), 0);

private Intent createIntent() {
    boolean isLoggedIn = Singleton.getInstance().isUserLoggedIn();
    //choose activity depends on is user logged in now
    Class<? extends Activity> clazz = isLoggedIn ? NewsActivity.class : LoginActivity.class;

    Intent intent = new Intent(this, clazz);
    //if not then we need notify login activity that it should force us to news after successful login, so we can use this extra inside login
    if (!isLoggedIn) {
        intent.putExtra("forceToNews",true);
    }
    return intent;
}

答案 1 :(得分:1)

您的测试代码始终将NewsActivity放入Intent。

  

final PendingIntent contentIntent = PendingIntent.getActivity(this,0,new Intent(this,NewsActivity.class),0);

我建议您编写一个通过Intent调用的简单类。 在这个类中,你检查用户是否登录,并从类中启动正确的Activity。