Могу ли я запустить NotificationListenerService в коде явно, а не запускать его ОС?

У меня есть класс, производный от NotificationListenerService, и он автоматически создается и запускается для меня при запуске приложения. Однако я хотел бы лениво запускать службу позже из действия и не запускать ее автоматически при запуске приложения. Можно ли сделать это? Манифест:

    <service android:name=".MyNotificationListener"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>

ПРИМЕЧАНИЕ. Прежде чем можно будет использовать NotificationListenerService, пользователь должен предоставить приложению доступ к уведомлению через настройку. Однако, если фильтр намерений удален из манифеста, приложение не отображается в настройках, и, следовательно, пользователь не может предоставить разрешение, поэтому без разрешения служба не может быть запущена. Похоже, что ОС нуждается в том, чтобы этот фильтр намерений был там, прежде чем он отобразит приложение в настройках.

ОБНОВЛЕНИЕ: в документации для BIND_NOTIFICATION_LISTENER_SERVICE сказано:

Должен быть обязательным для NotificationListenerService, чтобы гарантировать, что только система может привязаться к нему.

Я предполагаю, что это означает, что только ОС может запускать NotificationListenerService, и никто другой не может.


person Gruntcakes    schedule 01.04.2015    source источник


Ответы (1)


Да. Создайте намерение для службы, затем вызовите startService.

person Gabe Sechan    schedule 01.04.2015
comment
Как мне изменить манифест, чтобы он не запускался автоматически? - person Gruntcakes; 01.04.2015
comment
Удалите фильтр намерений. - person Gabe Sechan; 01.04.2015
comment
Прежде чем можно будет использовать NotificationListenerService, пользователь должен предоставить приложению доступ к уведомлению через параметр. Однако, если фильтр намерений удален из манифеста, приложение не отображается в настройках, и, следовательно, пользователь не может предоставить разрешение, поэтому без разрешения служба не может быть запущена. Похоже, что ОС нуждается в том, чтобы этот фильтр намерений был там, прежде чем он отобразит приложение в настройках. - person Gruntcakes; 01.04.2015