我正在开发一个应用程序,其中有一个服务应该始终在后台运行。此服务负责显示一个始终可见的通知栏。通知栏有两个按钮,第一个按钮用于获取并存储一些数据,第二个按钮应该打开一个活动,以显示所有的数据。我遇到了一个问题,当我关闭应用程序然后按下通知按钮以启动一个活动后,我的通知按钮停止响应。请注意,在第二个按钮单击开始活动之前,两个按钮都可以正常工作。
基本上,如果我关闭应用程序并删除启动活动的代码,则两个按钮都按预期工作,但是一旦我启动活动,两个按钮就停止工作了。
这是我的通知服务和通知栏按钮处理程序的模板代码:
处理通知栏的服务:
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);
}
}
处理通知栏上按钮按下的类
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();
}
}
基本上,如果我关闭应用程序并删除启动活动的代码,则两个按钮都按预期工作,但是一旦我启动活动,两个按钮就停止工作了。