当应用程序不在后台时,使用通知停止Android前台服务

时间:2018-08-22 06:37:58

标签: android foreground-service

我创建了带有自定义通知的Android前台服务。自定义通知包括一个关闭按钮。

enter image description here

当应用程序处于后台状态时,关闭按钮会停止服务,但是如果应用程序处于关闭状态而不是在后台(从最近的应用程序中删除),则不会停止服务。

问题:当应用程序不在后台(最近的应用程序)时,通知中的关闭按钮不会停止服务

预期结果:即使应用程序不在后台,关闭按钮也应能够停止该服务。 (类似于android mediaplayer应用程序。即使mediaplayer应用程序不在后台,我们也可以通过滑动通知来停止该服务。注意:我的应用程序不是Media Player应用程序)

它是通过实现远程视图而构建的,并且已将其设置为待处理的意图。

Intent closeIntent = new Intent().setAction(ACTION);
closeIntent.putExtra("action", "close");
PendingIntent pendingCloseIntent = PendingIntent.getBroadcast(this, 1, closeIntent, 0);

待定意图已设置为远程视图中的关闭按钮

remoteViews.setOnClickPendingIntent(R.id.button, pendingCloseIntent);

已创建一个通知接收方类,并扩展了BradcastReciever。

public class NotificationActivityReciever extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            intent.getStringExtra("action");
            unRegisterServiceReceiver();
        }
    }

unRegisterServiceReceiver方法

private void unRegisterServiceReceiver() {

        context.unbindService(this);
        sampleService.stopService();
        if (i != null) {
            context.unregisterReceiver(cashbackReciver);
            context.unregisterReceiver(notificationActivityReciever);
            stopService(i);
        }

使用Oncreate()方法启动服务代码

sampleService = new MyService();
        this.context = this;
        i = new Intent(context, MyService.class);
        context.bindService(i, this, Context.BIND_AUTO_CREATE);
        context.startService(i);
        registerCashbackReceiver();
        registerNotificationReceiver();

onDestroy()方法

@Override
    protected void onDestroy() {
        context.unbindService(this);
        context.unregisterReceiver(cashbackReciver);
        context.unregisterReceiver(notificationActivityReciever);
        super.onDestroy();
    }

谢谢。

0 个答案:

没有答案