通过在前台启动服务,我仍然感到很困惑。
目前:我有一项活动在后台启动服务,以执行传感器数据+ gps数据的统计信息。它一直被杀死,所以我在前台开始了。工作良好。 但是,当我触摸状态栏中的通知图标时,它似乎开始了一项新活动(我在Pending Intent中说明了这一点)。
所以简而言之,我仍然对整个事情感到困惑。 我希望活动能够在前台启动服务,当您单击通知栏时,它会将启动服务的现有活动带到前端。
以下是活动中的一些代码(当前将PendingIntent设置为null):
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
cycleDataService = ((CycleDataProService.LocalBinder) service)
.getService();
//Todo the notification bullshaite here...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.icon;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
//Intent notificationIntent = new Intent(cycleDataService, CycleDataProService.class);
//PendingIntent contentIntent = PendingIntent.getActivity(context, 0, myOwnIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pi = PendingIntent.getActivity(context, 0, null, 0);
//PendingIntent contentIntent = PendingIntent.getActivity(context, 0, , 0);
notification.setLatestEventInfo(context, contentTitle, contentText, pi);
mNotificationManager.notify(HELLO_ID, notification);
cycleDataService.startForeground(HELLO_ID, notification);
/*cycleDataService.startService(new Intent(cycleDataService,
CycleDataProService.class));*/
serviceIsRunning = true;
// Tell the user about this for our demo.
// Toast.makeText(Binding.this, R.string.local_service_connected,
// Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:2)
使用这种方式:
Intent notificationIntent = new Intent(context, YourActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
notification.setLatestEventInfo(context, "title", null, contentIntent);
答案 1 :(得分:0)
如果您希望活动继续,请使用FLAG_ACTIVITY_SINGLE_TOP,而不是重新启动。
Intent notificationIntent = new Intent(context, YourActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
notification.setLatestEventInfo(context, "title", null, contentIntent);