Von IntentService erstellte Benachrichtigungen verwenden immer einen falschen Intent
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.
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