Android - всегда возвращаться к активной в данный момент активности из уведомления? - PullRequest
3 голосов
/ 20 июня 2011

В настоящее время у меня есть вкладка экрана в моем приложении. Я использую уведомление, чтобы уведомить пользователя об изменении состояния в моем приложении, и в нормальных условиях, когда пользователь нажимает на уведомление, оно возвращается к экрану этой вкладки.

Вот код, который я использую для этого:

        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);   

Однако в моем приложении пользователь может запустить другое действие с помощью вкладки «Экран», и когда это действие «активно», я хочу, чтобы уведомление приводило пользователя к новому действию, а не действие на вкладке. Но при нажатии на уведомление оно всегда переходит на экран вкладки.

Можно ли быть уверенным, что уведомление всегда направляет пользователя к самой последней активности?

1 Ответ

0 голосов
/ 20 июня 2011

Вы можете воссоздать последнее действие, которое было создано пользователем, в ответ на нажатие уведомления.

в вашем ожидающем действии вы можете добавить дополнительные данные к remmeber, какое действие показать:

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

где getCurrrentActivityID () возвращает константу, которую вы используете для определения последней запущенной операции.

И в onCreateMethod вашего tabScreen вы можете проверить полученное вами намерение и дополнительный параметрчтобы снова запустить это действие в ответ на щелчок по уведомлению

@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

. Конечно, с помощью вкладки вы можете отсканировать экран, фильтрующий имя намерения " showTabScreen " в файле manifest.xml.

С уважением, Стефан

...