Android - 始终从通知返回当前活动的活动?

时间:2011-06-20 09:40:40

标签: android android-activity notifications

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

以下是我用于此的代码:

        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活动。但是当点击通知时,它总是进入选项卡屏幕。

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

1 个答案:

答案 0 :(得分:0)

您可以重新创建用户创建的最后一项活动,以响应点击的通知。

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

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

其中getCurrrentActivityID()返回一个常量,用于标识上次启动的活动。

并且,在tabScreen的onCreateMethod中,您可以检查收到的意图以及为响应点击通知而再次启动该活动的额外参数

@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

当然,您可以使用tabScreen过滤manifest.xml文件中的意图名称“ showTabScreen ”。

此致  斯特凡