Android - 怎样使通知栏返回到当前活跃的 Activity?

3

我目前在我的应用程序中有一个选项卡屏幕。我使用通知来通知用户应用程序状态的更改,在正常情况下,当用户单击通知时,它会返回到此选项卡屏幕。

以下是我用于此的代码:

        String ns = Context.NOTIFICATION_SERVICE;
        mNotificationManager = (NotificationManager) context.getSystemService(ns);

        Intent notificationIntentRegState = new Intent();
        ComponentName cn = new ComponentName(context, TabScreenActivity.class);
        notificationIntentRegState.setComponent(cn);

        contentIntentRegState = PendingIntent.getActivity(context, 0, notificationIntentRegState, 0);
        notificationRegStateText = context.getString(R.string.app_name);
        notificationRegState = new Notification(icon, notificationRegStateText, 0);

        notificationRegState.setLatestEventInfo(context, notificationRegStateText, context.getString(R.string.notification_text, contentIntentRegState);
        mNotificationManager.notify(3, notificationRegState);   

但是在我的应用中,用户可以从TabScreen启动另一个活动,当此活动处于“活动”状态时,我希望通知将用户带到新活动而不是tabscreen活动。但是当点击通知时,它总是跳转到Tab屏幕。

是否有可能确保通知始终将用户引导到最近的活动?

1个回答

0

当用户点击通知时,您可以重新创建最后一个由用户创建的活动。

在您的待处理活动中,您可以添加额外的数据以记住要显示哪个活动:

Intent notificationIntentRegState = new Intent( "showTabScreen" );
ComponentName cn = new ComponentName(context, TabScreenActivity.class);
notificationIntentRegState.setComponent(cn);
notificationIntentRegState.putExtra( CURRENT_ACTIVITY, getCurrentActivityId() );

getCurrrentActivityID() 返回一个常量,您可以使用它来标识最后启动的活动。

而且,在 tabScreen 的 onCreate 方法中,您可以检查接收到的意图和额外参数,以响应通知上的单击再次启动该活动。

@Override
public void onCreate( Bundle b )
{
     String action = getIntent().getAction();
     if( action != null && action.equals( "showTabScreen" )  )
     {
        int activityToShow = getIntent().getIntExtra( CURRENT_ACTIVITY, -1 );
        if( activityToShow != -1 )
        {
           switch( activityToShow )
           {
               case ACTIVITY_ID_ONE : startActivity( ActivityOne.class );
           }//switch
           startActivity();
        }//if
     }//if
}//met

当然,在你的 manifest.xml 文件中使用 tabScreen 过滤器来过滤 intent 名称 "showTabScreen"。
敬礼, Stéphane

我尝试过这种方法,但是当我使用它时,会启动一个新的Activity,而不是将旧的Activity带回前台。 - Donal Rafferty
@Donal Rafferty,你想让showTabScreen显示出来,但不是新的吗?那么也许你应该有另一个意图动作名称(我的意思是在manifest.xml中),它明确地从showTabScreen中启动任何内容... - Snicolas
我不想显示TabScreen,因为将有另一个活动处于活动状态。这将是用户最后与之交互的活动,当用户按下Home键时,他们将能够通过通知返回到我的应用程序。当前,该通知返回到Tabscreen,但应返回到活动状态而非tabscreen。 - Donal Rafferty
1
@Donal Rafferty 哦!我终于理解了你的问题(我想):当用户按下HOME按钮时,他们会返回到一个全新的活动:之前启动的活动的新实例。它是正确的活动类,但不是正确的实例。是这样吗?如果是这样,那就没什么希望了:Android控制哪个活动保留在内存中,哪个必须重新创建。因此,你能做的最好的事情就是保存每个需要重新创建活动的参数,而不是希望Android会保留上一个实例并再次显示它,因为这永远不会发生。 - Snicolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接