我知道,有很多这种类型的问题,但我尝试了所有方法,仍然无法解决。
我的应用程序中有一个Activity,在这个Activity中,有4个选项卡,第四个选项卡包含一个列表和一个记录按钮。当我点击记录按钮时,它会启动GPS监听器。在获取新的GPS值后,它将其推送到列表中。
到目前为止,这个功能是正常工作的!
如果我点击主页按钮它仍然可以运行,如果我长按主页按钮,它则会恢复到特定选项卡打开的那个Activity,并且列表仍然保留了列表项并且GPS监听器仍然处于活动状态。
这也完全没有问题!
现在我想添加一个通知,它以.number的形式显示列表的GPS值数量。每当收到新的GPS信号时,它会更新通知图标上的数字。这不是问题,但单击通知的操作会完全破坏我的应用程序。
所以,updateNotify()在接收到新的GPS信号时被调用。而callNotify()是第一个被调用的,在它开始监听GPS之前。是的,notifyNumber/2是我的意图,因为我还要用到那个数字。
如果我像这样编译它,并点击通知,它会在第一个选项卡上打开一个新的tabactivity。如果我点击返回,就会出现很多错误(数据库仍然打开,空指针等)。我认为这是因为它启动了一个新的tabactivity,而另一个仍然开着,因为我可以看到GPS监听器仍在工作。
所以,我想做的是: 我打开我的应用程序,进入tabactivity,打开第4个选项卡,点击记录。如果我点击返回,它应该隐藏应用程序,如果我只是点击主页按钮也是一样的。但是有一个通知。 如果我点击它,它应该只是再次显示隐藏的活动,就这样。 那么,我在哪里做错了呢? 我认为FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP标志应该解决这个问题?
我的应用程序中有一个Activity,在这个Activity中,有4个选项卡,第四个选项卡包含一个列表和一个记录按钮。当我点击记录按钮时,它会启动GPS监听器。在获取新的GPS值后,它将其推送到列表中。
到目前为止,这个功能是正常工作的!
如果我点击主页按钮它仍然可以运行,如果我长按主页按钮,它则会恢复到特定选项卡打开的那个Activity,并且列表仍然保留了列表项并且GPS监听器仍然处于活动状态。
这也完全没有问题!
现在我想添加一个通知,它以.number的形式显示列表的GPS值数量。每当收到新的GPS信号时,它会更新通知图标上的数字。这不是问题,但单击通知的操作会完全破坏我的应用程序。
实际代码看起来像这样:
public void callNotify(String text) {
notif = new Notification();
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.icon = R.drawable.icon;
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
notif.ledARGB = Color.RED;
notif.ledOnMS = 200;
notif.ledOffMS = 200;
notif.flags = Notification.FLAG_SHOW_LIGHTS
| Notification.FLAG_ONGOING_EVENT
| Notification.FLAG_ONLY_ALERT_ONCE;
notif.number = notifyNumber;
mNotificationManager.notify(notifyNumber, notif);
}
public void updateNotify(String text) {
notifyNumber++;
notif.number = (int) (notifyNumber / 2);
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
mNotificationManager.cancel((notifyNumber - 2));
mNotificationManager.notify(notifyNumber, notif);
}
所以,updateNotify()在接收到新的GPS信号时被调用。而callNotify()是第一个被调用的,在它开始监听GPS之前。是的,notifyNumber/2是我的意图,因为我还要用到那个数字。
如果我像这样编译它,并点击通知,它会在第一个选项卡上打开一个新的tabactivity。如果我点击返回,就会出现很多错误(数据库仍然打开,空指针等)。我认为这是因为它启动了一个新的tabactivity,而另一个仍然开着,因为我可以看到GPS监听器仍在工作。
所以,我想做的是: 我打开我的应用程序,进入tabactivity,打开第4个选项卡,点击记录。如果我点击返回,它应该隐藏应用程序,如果我只是点击主页按钮也是一样的。但是有一个通知。 如果我点击它,它应该只是再次显示隐藏的活动,就这样。 那么,我在哪里做错了呢? 我认为FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP标志应该解决这个问题?