如何停止NotificationListenerService?

时间:2014-12-28 20:03:35

标签: java android notifications listener

我编写了一个NotificationListenerService的子类,它在我的应用程序运行时在后台运行。但是,我希望允许用户在他们想要节省电池的情况下关闭服务。我按如下方式实现:

MainActivity.java

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        switch (id) {
            case R.id.action_quit:
                Intent serviceStopIntent = new Intent(getResources().getString(R.string.communicator_intent));
                serviceStopIntent.putExtra("command", "shutdown");
                sendBroadcast(serviceStopIntent);

        }

ListeningService.java

public class ListeningService extends NotificationListenerService {
      public void doStop() {
        Log.d(LOGTAG, "***** DEBUG_jwir3: Requesting stop of ListeningService");
        this.stopSelf();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mCommunicator);
        Log.d(LOGTAG, "***** DEBUG_jwir3: Destroying ListeningService");
        mMessageHandler.shutdown();
    }

    class ListeningCommunicator extends BroadcastReceiver {
        @Override
        public void onReceive(Context aContext, Intent aIntent) {
            Log.d(LOGTAG, "***** DEBUG_jwir3: Received command");
            if (aIntent.getStringExtra("command").equals("shutdown")) {
                Log.d(LOGTAG, "***** DEBUG_jwir3: Received shutdown command");
                ListeningService.this.doStop();
            }
        }
    }
}

(我已经简化了代码,但如果需要,我可以提供更多示例)。

我知道BroadcastReceiver正在接收消息,我知道正在调用doStop()(由于日志消息),但是没有调用服务的onDestroy()。此外,我可以从Settings -> Apps -> Running告诉该服务仍在运行。

我一直在研究这个问题,似乎(出于某种原因)NotificationListenerService没有回复stopSelf()stopService()个请求。我发现How to stop my service?此处接受的答案建议将NotificationListenerService包装在另一个Service中,然后根据需要停止/启动它。但是,这似乎无济于事,因为NotificationListenerService仍然需要以某种方式停止,这个包装服务也无法阻止它。

似乎应该有一个更好的方法来做到这一点而不是接受的答案,我想知道是否有人能够了解我将如何解决这个问题?

0 个答案:

没有答案