Android - Нажатие на уведомление в строке состояния связывает намерение с целевой активностью - PullRequest
1 голос
/ 25 марта 2010

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

 String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
    int icon = R.drawable.icon;     
    long when = System.currentTimeMillis();
    Notification notification = new Notification(icon, "Test Notification", when);


    Context context = getApplicationContext();      

    Bundle bundle = new Bundle();
    bundle.putString("action", "view");
    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.putExtras(bundle);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);     
    mNotificationManager.notify(1, notification);

Когда пользователь щелкает эти уведомления, я читаю строку пакета «действие» и выполняю это действие. Вот код:

 Bundle bundle = this.getIntent().getExtras();

    if(bundle != null)
    {
        String action = bundle.getString("action");
            performAction(action)
    }

Все работает как положено. Но когда я сворачиваю приложение с помощью кнопки «стрелка» на устройстве, а затем нажимаю и удерживаю кнопку «Домой» и нажимаю на значок моего приложения, приложение запускается и выполняет то же последнее действие, которое было выполнено нажатием последнего уведомления. Я понял, что когда мы щелкаем значок приложения, приложение запускается с последним намерением, вызванным уведомлением. Кто-нибудь может помочь в этом?

Ответы [ 2 ]

4 голосов
/ 25 марта 2010

Во-первых, «действие, которое отправляет несколько уведомлений в строку состояния», является плохим дизайном для производственного приложения. Activity уже имеет пользовательский интерфейс перед пользователем и поэтому не нуждается в Notifications. Даже если вы делали это из Service, большинству огромных приложений Android не нужно больше, чем одно Notification за раз.

К вашей конкретной проблеме вы думаете, что создаете несколько PendingIntents, но это не так. По умолчанию отдельный PendingIntent создается только тогда, когда базовый Intent существенно отличается от Intent, используемого другим выдающимся PendingIntent. Ваш отличается только от дополнений. Если у вас будет несколько выдающихся PendingIntents, вам нужно, чтобы они были в разных Intents, где эти Intents отличаются компонентом, действием, данными (Uri) или категориями.

0 голосов
/ 26 марта 2010

Я нашел решение сам:

Intent intent = getIntent();
int flags = intent.getFlags();
boolean launchedFromHistory = ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0);

Таким образом, мы можем проверить, с чего началась деятельность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...