Как запросить разрешение «Не беспокоить» на Samsung S5 (SM-G800H)?

Это обычный способ запросить разрешение DND:

Intent intent = new Intent();
intent.setAction("android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS");
startActivityForResult(intent, NOTIFICATION_REQUEST_CODE);

Однако на (по крайней мере, одном) Samsung SM-G800H это выдает ActivityNotFoundException.

По-видимому, на этой модели у них есть что-то под названием «Режим блокировки». Кто-нибудь знает правильное намерение/как обращаться с этой моделью? См. https://www.cnet.com/uk/how-to/where-to-find-do-not-disturb-mode-on-the-galaxy-s5/

Сведения об устройстве: Производитель: Samsung Модель: SM-G800H Плата: Msm8228 API Android: 23 ОС Android: 6.0.1 Марка: Samsung Оперативная память: 1,35 ГБ Ориентация: портретная


person Ewan    schedule 01.12.2017    source источник


Ответы (1)


Это может быть не проблема, связанная с Samsung. Согласно официальной документации, ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS доступен только через API. 23+ (Зефирка). На S5, который вы тестируете, работает Android 6 Marshmallow? Если нет, то это ваши проблемы.

РЕДАКТИРОВАТЬ: поскольку это действие может отсутствовать на каждом устройстве, даже если оно находится на Android 6, вам необходимо обработать случай, когда намерение не может быть разрешено. Итак, что-то вроде этого может быть тем, что вы хотите:

PackageManager packageManager = getActivity().getPackageManager();

Intent intent = new Intent();
intent.setAction("android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS");

if (intent.resolveActivity(packageManager) != null) {
    startActivityForResult(intent, NOTIFICATION_REQUEST_CODE);
} else {
    Log.d(TAG, "No Intent available to handle action");
}
person Glaucus    schedule 01.12.2017
comment
Да, это так, путь кода — API 23+. Кстати, я не тестирую, иначе, вероятно, мог бы понять это. Это сбой живого приложения, о котором сообщается через Firebase. Я все равно изменил свой код на intent.setAction(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);, так что вместо этого было бы исключение нулевого указателя. Тем не менее, не мудрее для намерения, хотя. - person Ewan; 01.12.2017
comment
Я обновил свой ответ. Я думаю, вам нужно проверить, может ли это намерение быть разрешено, прежде чем пытаться начать это действие. - person Glaucus; 01.12.2017
comment
Да, я уже изменил код на catchActivityNotFoundException. Я думаю, что кто-то знает намерение, используемое в S5, что мне и нужно сейчас... - person Ewan; 01.12.2017
comment
Интересно, можете ли вы отсканировать телефон, чтобы получить список всех фильтров намерений. Может быть, что-то вроде этого: play.google.com/store /приложения/ - person Glaucus; 01.12.2017