Von IntentService erstellte Benachrichtigungen verwenden immer einen falschen Intent

Problem

Wenn der Benutzer drücktSenden "Button 1"(scrollen Sie nach unten, um den Aufbau der App zu sehen) eine neueNotification wird aus dem erstelltRefreshService. Wenn der Benutzer diese Benachrichtigung drückt aMainActivity Instanz wird gestartet und erhält eineString mit dem WertButton 1 über demIntent.

Dieser Wert wird angezeigt.

Wenn der Benutzer jetzt die Taste drücktSenden Sie "Button 2" ein neuerNotification wird aus dem erstelltRefreshService. Wenn der Benutzer diese Benachrichtigung drückt aMainActivity Instanz wird gestartet und erhält eineString EBENFALLS mit dem WertButton 1 über demIntent.

Wie Sie sich vorstellen können, sollte normalerweise der Wert vorhanden seinButton 2.

Als der Benutzer den ersten Button drückte warSenden Sie "Button 2" dann würde es immer gebenButton 2 gesendet werden.

Die einzige Möglichkeit, den Wert der zweiten Taste zu erhalten, besteht darin, das Telefon neu zu starten und zuerst die zweite Taste zu drücken. Selbst das Schließen mit Gewalt funktioniert nicht.

Ich weiß, dass ich die Benutzeroberfläche auch auf andere Weise ändern kann. Aber ich brauche diesen Ansatz in einer App, in der ich die 'MainActivity' mit einer anderen neu starten mussIntent Der Ansatz sollte also derselbe sein.

Konstruktion

A Activity namensMainActivity

A IntentService namensRefreshService

Hauptaktivität

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

App-Layout

Antworten auf die Frage(1)

Ihre Antwort auf die Frage