Intereting Posts
Лучшая практика приведения Материала в настройки с помощью AppCompat? Создание масштабированного растрового изображения с помощью createScaledBitmap в Android Определите, было ли приложение Android загружено из Google Play против Amazon vs Other Как добавить KmlLayer в M4B Google Map для бизнеса? Получите контактное имя с указанием номера телефона в Android Как служба Android обновит пользовательский интерфейс активности, которая его начала? AsyncTask.executeOnExecutor () до уровня API 11 Встроенные типы NEON работают в C, но вызывают ошибку недопустимых аргументов в C ++ Android – Styling TableLayout Как очистить представления, которые хранятся в RecycleBin ListView? Виджет android работает в том же процессе, что и приложение AppBarLayout с отметкой height = 0dp не отвечает на сенсорные события (нажмите) Проблема кодирования строк в Webview Retrofit 2 Многостраничный запрос POST отправляет дополнительные кавычки в PHP RecyclerView в макете NestedScrollView без прокрутки

Как проверить, разрешено ли моему приложению показывать уведомление

В настройках Android пользователи могут отключить уведомление, если они этого не хотят. Так есть ли какой-либо метод, например isNotificationAllowed() чтобы проверить, разрешено ли моему приложению показывать уведомление? И как открыть страницу настройки Android, чтобы мои пользователи могли включить уведомление?

Solutions Collecting From Web of "Как проверить, разрешено ли моему приложению показывать уведомление"

EDIT – Новый ответ:

Похоже, Google добавил правильный вызов API: NotificationManagerCompat.from(context).areNotificationsEnabled()


СТАРЫЙ ОТВЕТ:

Для тех, кто смотрит на этот вопрос, обратите внимание, что NotificationListenerService отличается от «Показать уведомление». Эти две разные вещи ! Если приложение имеет доступ к NotificationListenerService это не означает, что его уведомления отображаются и наоборот. Чтобы проверить, заблокировал ли пользователь уведомление из вашего приложения или нет, вы можете использовать отражение:

 public class NotificationsUtils { private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; public static boolean isNotificationEnabled() { AppOpsManager mAppOps = (AppOpsManager) GlobalContext.getContext().getSystemService(Context.APP_OPS_SERVICE); ApplicationInfo appInfo = GlobalContext.getContext().getApplicationInfo(); String pkg = GlobalContext.getContext().getApplicationContext().getPackageName(); int uid = appInfo.uid; Class appOpsClass = null; /* Context.APP_OPS_MANAGER */ try { appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (int)opPostNotificationValue.get(Integer.class); return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return false; } } 

Источник: https://code.google.com/p/android/issues/detail?id=38482

 NotificationManagerCompat.from(context).areNotificationsEnabled() 

Кажется, это путь.

Попробуй это:

Есть ли способ, которым приложение может проверить, разрешено ли ему получать уведомления?

И здесь есть немного больше объяснений:

Проверить доступ к уведомлениям с помощью NotificationListenerService

Попробуй это:

 if (Settings.Secure.getString(getActivity().getContentResolver(), "enabled_notification_listeners").contains(getActivity().getPackageName())) { // Notification access service already enabled Toast.makeText(getActivity(),"notification enabled",Toast.LENGTH_LONG).show(); } else { Intent intent = new Intent(); intent.setClassName("com.android.settings", "com.android.settings.Settings$AppNotificationSettingsActivity"); intent.putExtra("app_package", getPackageName()); intent.putExtra("app_uid", getApplicationInfo().uid); startActivity(intent); }