Ich arbeite an einer App, wo ich einen Dienst habe, der immer im Hintergrund ausgeführt werden sollte. Dieser Dienst ist verantwortlich für eine Benachrichtigungsleiste, die immer sichtbar sein sollte. Die Benachrichtigungsleiste verfügt über 2 Schaltflächen, wobei die erste für das Erfassen und Speichern von Daten dient und die zweite eine Aktivität, die alle Daten anzeigt. Ich habe ein Problem festgestellt, bei dem, wenn ich die Anwendung schließe und dann die Benachrichtigungsschaltfläche drücke, die nach dem Start dieser Aktivität eine Aktivität startet, meine Benachrichtigungsschaltflächen nicht mehr reagieren. Beachten Sie, dass beide Schaltflächen vor dem Punkt funktionieren, an dem der zweite Klick die Aktivität startet.Android-Benachrichtigungsleiste Schaltflächen reagieren nicht
Hier ist ein Template-Code für meinen Benachrichtigungsdienst und für Benachrichtigungsleiste Tastenhandler
Dienst, der die Benachrichtigungsleiste
public class NotificationBarService extends Service {
private int notificationID;
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
notificationID = new Random().nextInt();
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
contentView.setImageViewResource(R.id.image, R.mipmap.ic_launcher);
contentView.setTextViewText(R.id.title, "Custom notification");
contentView.setTextViewText(R.id.text, "This is a custom layout");
//Handle the button for showing bookmarks on custom notification
Intent buttonsIntent2 = new Intent(this, NotificationBarButtonActivityHandler.class);
buttonsIntent2.putExtra(PENDING_ACTION, SHOW_BOOKMARKS);
contentView.setOnClickPendingIntent(R.id.notificationBarShowBookmarksButton, PendingIntent.getActivity(this, 0, buttonsIntent2, 0));
//Handle the button for adding bookmark on custom notification
Intent buttonsIntent = new Intent(this, NotificationBarButtonActivityHandler.class);
buttonsIntent.putExtra(PENDING_ACTION, REGISTER_BOOKMARK);
contentView.setOnClickPendingIntent(R.id.notificationBarAddBookmarkFromChromeButton, PendingIntent.getActivity(this, 1, buttonsIntent, 0));
RemoteViews notificationView = new RemoteViews(getPackageName(),
R.layout.custom_notification);
Intent switchIntent = new Intent(this, NotificationBarService.class);
PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0,
switchIntent, 0);
notificationView.setOnClickPendingIntent(R.id.notificationBarShowBookmarksButton,
pendingSwitchIntent);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setContent(contentView)
.setSmallIcon(R.drawable.notification_small_icon)
.setOngoing(true);
Notification notification = mBuilder.build();
startForeground(notificationID, notification);
return START_STICKY;
}
@Override
public void onDestroy(){
super.onDestroy();
stopForeground(true);
}
}
Klasse behandelt, die den Knopf drückt auf Benachrichtigungsleiste Griff
public class NotificationBarButtonActivityHandler extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String action = (String) getIntent().getExtras().get(NotificationBarService.PENDING_ACTION);
if (action != null) {
if (action.equals(NotificationBarService.REGISTER_BOOKMARK)){
CustomLogger.log("---------------- BUTTON FOR COLLECT DATA WAS PRESSED!!!");
//Does something here
}
else if(action.equals(NotificationBarService.SHOW_BOOKMARKS)){
CustomLogger.log("---------------- BUTTON FOR SHOW DATA WAS PRESSSED!!!");
//Notification bar buttons start not responding right after
//this is executed. Note that this problem only occurs if I close the app
//and press the notification button to execute this code.
//Otherwise this works just fine.
Intent intent2;
intent2 = new Intent(this, BookmarkDisplayActivity.class);
startActivity(intent2);
}
}
finish();
}
}
Also im Grunde, wenn ich die Anwendung schließe und den Code, der die Aktivität startet, beide Tasten funktionieren wie erwartet, aber sobald ich Sterne Bei der Aktivität hören beide Tasten auf zu arbeiten.