Intereting Posts
Как я могу многострочно расширять заголовок CollapsingToolbarLayout? Понимание концепций холста и поверхности Как установить переключатель в Android Нажатие на значок гамбургера на панели инструментов не открывает навигационный ящик Ошибка градиента: выполнение выполнено для задачи ': app: processDebugGoogleServices' Как нарисовать заполненный треугольник на андроиде Canvas Является ли поведение по умолчанию для Android WebView изменено на открытие внутри всех ссылок? Как _really_ программно изменить основной и акцентный цвет в Android Lollipop? Ошибка приложения на устройстве HTC M8 с ОС Lollipop для вызова веб-службы Метод не найден с помощью DigestUtils в Android Proguard Отсутствующий параметр типа Google Maps Android api v2 и текущее местоположение Белая граница вместе с прозрачностью в «LinearLayout» Установите будильник с Android 4.4 Kitkat Попытка mockito издеваться над любым классом генерирует ExceptionInInitializerError

Использование root для очистки уведомлений о статусной строке

В настоящее время я работаю над приложением, используя службу доступности для обработки уведомлений. Особенно неприятно то, что сторонние приложения не могут очищать уведомления о статусной строке , кроме запуска намерения, связанного с уведомлением (и запуска приложения).

Я долго искал способ использовать root для отклонения уведомления или очистки полного списка, но я потерпел неудачу.

Я думаю, что я помню приложение, которое я видел, которое очистило строку состояния, быстро открыв строку состояния и щелкнув по кнопке очистки программно, но я больше не могу ее найти, и я думаю, что это было на Android 2.2.

Мне было интересно, есть ли способ взаимодействовать с уведомлениями о статусной строке с использованием какой-то базы данных или с простым вызовом SU .

Solutions Collecting From Web of "Использование root для очистки уведомлений о статусной строке"

ОБНОВЛЕНИЕ – см. Рабочий раствор ниже

Весь этот материал обрабатывается службой NotificationManagerService (см. Здесь: https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/NotificationManagerService.java ). Я думаю, в частности, вас будет интересовать метод void cancelAll (int userId). Когда вы нажимаете кнопку очистки на экране состояния, это метод, который фактически вызывается (с параметром ActivityManager.getCurrentUser ()).

Вы можете попытаться получить его экземпляр, вызвав NotificationManager.getService через отражение (см. Скрытый метод getService () в NotificationManager http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/app /NotificationManager.java ), а затем попробуйте каким-то образом вызвать cancelAll в возвращаемой службе (например, через отражение снова).

ОБНОВИТЬ

Я нашел более простой способ очистки уведомлений через службу состояния. Следующий код должен работать:

IBinder b = (IBinder) Class.forName("android.os.ServiceManager").getMethod("getService", new Class[] { String.class }).invoke(null, new Object[] { "statusbar" }); Object iFace = Class.forName("com.android.internal.statusbar.IStatusBarService$Stub").getDeclaredMethod("asInterface", new Class[] { IBinder.class }).invoke(null, new Object[] { b }); iFace.getClass().getMethod("onClearAllNotifications", new Class[0]).invoke(iFace, (Object[]) null); 

Это вызовет исключение SecurityException, если вы не используете его как root, но успешно очищает уведомления, если у вас есть права на root

Вы можете очистить все уведомления, позвонив

 service call notification 1 

В оболочке с правами root