Powiadomienie utworzone przez IntentService zawsze używa złego zamiaru

Problem

Gdy użytkownik naciśnieWyślij „Przycisk 1”(przewiń w dół, aby zobaczyć konstrukcję aplikacji) nowyNotification jest tworzony zRefreshService. Jeśli użytkownik naciśnie to powiadomienieMainActivity instancja zostanie uruchomiona i otrzymaString z wartościąButton 1 nadIntent.

Ta wartość zostanie wyświetlona.

Gdy użytkownik naciśnie terazWyślij „Przycisk 2” nowyNotification jest tworzony zRefreshService. Jeśli użytkownik naciśnie to powiadomienieMainActivity instancja zostanie uruchomiona i otrzymaString RÓWNIEŻ z wartościąButton 1 nadIntent.

Więc jak można się domyślić, zwykle powinna być wartośćButton 2.

Gdy pierwszy przycisk został naciśnięty przez użytkownikaWyślij „Przycisk 2” wtedy zawsze będzieButton 2 być wysłanym.

Jedynym rozwiązaniem, które pozwala uzyskać wartość drugiego przycisku, jest ponowne uruchomienie telefonu i pierwsze naciśnięcie drugiego przycisku. Nawet siła zamykania nie działa.

Wiem, że mogę również zmienić interfejs użytkownika w inny sposób. Ale potrzebuję tego podejścia w aplikacji, w której muszę ponownie uruchomić „MainActivity” innymIntent więc podejście powinno być takie samo.

Budowa

A Activity nazywaMainActivity

A IntentService nazywaRefreshService

Główna aktywność

public class MainActivity extends Activity implements View.OnClickListener {
    public static final String RECEIVED = "received";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((TextView)findViewById(R.id.textView_received)).setText(getIntent().getStringExtra(RECEIVED));

        findViewById(R.id.button_1).setOnClickListener(this);
        findViewById(R.id.button_2).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, RefreshService.class);

        if(v.getId() == R.id.button_1){
            intent.putExtra(RECEIVED, "Button 1");
            Toast.makeText(this,"Sent \"Button 1\"",Toast.LENGTH_LONG).show();
        }
        else if(v.getId() == R.id.button_2){
            intent.putExtra(RECEIVED, "Button 2");
            Toast.makeText(this,"Sent \"Button 2\"",Toast.LENGTH_LONG).show();
        }

        startService(intent);
    }
}

RefreshService

public class RefreshService extends IntentService {
    public RefreshService() {
        super("RefreshService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        String received = intent.getStringExtra(MainActivity.RECEIVED);

        Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.putExtra(MainActivity.RECEIVED, received);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setContentTitle("IntentServiceRefresh").setContentText(received).setSmallIcon(R.drawable.ic_notification_small).setContentIntent(pendingIntent);
        Notification notification = builder.build();

        // Hide the notification after it's selected
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notification);
    }
}

Układ aplikacji

questionAnswers(1)

yourAnswerToTheQuestion