25

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

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

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がフォーカスを受け取るようにします。

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

4

2 に答える 2

39

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

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

于 2011-03-28T21:31:26.540 に答える
1

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

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);
于 2014-01-22T10:34:39.900 に答える