我有一个forground服务,由绑定活动启动。当活动创建服务时,如果用户启动服务,它将通过调用下面的代码使其成为forground
public void makeForgroundService() {
notificationBuilder = new NotificationCompat.Builder(this);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
sessionId, new Intent(this, MainActivity.class), 0);
notificationBuilder.setContentTitle("My Test Service ")
.setContentText("Service now Running")
.setSmallIcon(R.drawable.newicon)
.setContentIntent(pendingIntent);
// notificationManager = (NotificationManager)
// getSystemService(Context.NOTIFICATION_SERVICE);
notify_id = sessionId;
Log.e(TAG,"making foreGrounf : sessionId = "+String.valueOf(notify_id));
startForeground(notify_id, notificationBuilder.build());
isForeground = true;
}
现在,当再次启动活动时,它将绑定到服务器上(因为服务已经运行并且是forground)。现在我想取消通知,在getService调用上尝试了,但没有工作!
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// Log.e(TAG, "Inside onServiceConnected");
myService = ((MyService.MyBinder) service).getService();
if(myService.isForeground){
Log.e(TAG,"From Activity,removing notification : "+myService.notify_id);
NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
nm.cancel(myService.notify_id);
}
}
我不想{My}的stopForground
。只需要隐藏或取消通知。
如果stopForground是唯一的方法,那么stopForground会让活动在前台活动期间被杀死吗?我可以在活动的onDestroy上设置StartForground吗?这是一种(正确的)方式吗?
答案 0 :(得分:2)
您可以向服务发送消息(在附加内容中传递一些参数)以停止前景状态。
然后在您的服务中,您需要拨打的唯一内容是stopForeground(true)
,通知将被删除。
答案 1 :(得分:1)
正如您在Android服务文档中看到的那样,没有通知就无法拥有前台服务。重点是,如果服务资源密集,用户有权知道。