1

我有一个由绑定活动启动的前台服务。当活动forast创建服务时,如果用户启动服务,它将通过调用以下代码使其成为前台

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;
}

现在当活动再次启动时,它绑定到服务,(因为服务已经在运行并且是前台)。现在我想取消通知,在 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);

        }
    }

笔记

我不想stopForgroundMyService。只需要隐藏或取消通知。

更新:

如果 stopForground 是唯一的方法,stopForground 会让在前台活动期间可能被杀死的服务吗?我可以在活动的 onDestroy 设置 StartForground 吗?这是一种(正确的)方式吗?

4

2 回答 2

2

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

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

于 2014-06-18T05:25:13.247 回答
1

正如您在 android services 文档中看到的那样,您不能在没有通知的情况下拥有前台服务。关键是,如果一项服务是资源密集型的,那么用户有权知道。

服务文档

于 2018-01-23T14:11:11.643 回答