ForegroundService的通知取消不起作用

时间:2014-06-18 05:19:46

标签: android android-service android-notifications foreground-service

我有一个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吗?这是一种(正确的)方式吗?

2 个答案:

答案 0 :(得分:2)

您可以向服务发送消息(在附加内容中传递一些参数)以停止前景状态。

然后在您的服务中,您需要拨打的唯一内容是stopForeground(true),通知将被删除。

答案 1 :(得分:1)

正如您在Android服务文档中看到的那样,没有通知就无法拥有前台服务。重点是,如果服务资源密集,用户有权知道。

Service docs