web-dev-qa-db-ja.com

Android PresidentingIntentは、既存のアクティビティに移動しますか?

これを検索する方法が本当にわかりませんでした...

ステータスバーに通知を表示するためにジョブがキューに追加またはキューから削除されるたびに呼び出される次のものがあります。

private void showNotification()
{
    int jobsize = mJobQueue.size();
    int icon = (jobsize == 0) ? 
        Android.R.drawable.stat_sys_upload_done : 
        Android.R.drawable.stat_sys_upload;
    Notification notification = 
        new Notification(icon, "Test", System.currentTimeMillis());
    Intent intent = new Intent(this, FileManagerActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

    notification.flags = 
        (Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL);
    notification.setLatestEventInfo(this, 
        "Uploading to our servers",
        getString((jobsize > 0) ? 
            R.string.notification_active_transfers : 
            R.string.notification_no_transfers),
        pendingIntent);

    mNotifyManager.notify(NOTIFICATION, notification);
}

現在の動作は次のとおりです。

  • ユーザーがログアウトして通知を押すと、新しいFileManagerActivityが開きます(ops!)認証アクティビティから開始し、アプリケーションが既に存在する場合は、自然な順序でスタックにインテントを渡すことで、これを回避できます。ランニングは私が苦労しているところです。

  • ユーザーがすでにFileManagerActivityを開いている場合は、通知をクリックすると、その上に2番目のインスタンスが配置されます。この場合、現在実行中のFileManagerActivityが、新しいインスタンスを起動するのではなく、フォーカスを受け取るようにします。

どうすれば正しい動作を得ることができますか?

24
Tom Fobear

これは、アプリケーションマニフェストで アクティビティ を設定して 起動モード 'singleTop'を使用することで以前に実行しました。既存のアクティビティが存在する場合はそれを使用して、目的の機能を実現します。この場合、onNewIntentがアクティビティで呼び出されます。

ユーザーがログインしていない場合は、認証のためにFileManagerActivityをチェックインし、必要に応じて新しいアクティビティを開始する必要があります。

37

これらを追加するとうまくいったと思います:

intent.setAction(Long.toString(System.currentTimeMillis()));

保留中のIntent.FLAG_UPDATE_CUR

Intent intent = new Intent(context, MyOwnActivity.class);
intent.putExtra("foo_bar_extra_key", "foo_bar_extra_value");
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
1
Ahmad Ronagh