Авто тихий андроид N и позже - PullRequest
0 голосов
/ 14 мая 2018

Я создаю приложение для Android, где мне нужно перевести телефон пользователя в беззвучный режим. Я использую разные методы, и он прекрасно работает до Android M (уровень 23). Теперь, когда все мы знаем, что Android обновил политику автоматического бесшумного режима в android N и более поздних версиях и нуждается в специальном разрешении «Не беспокоить доступ», чтобы перевести телефон в беззвучный режим. Я также сделал то же самое для Android N и более поздних версий ОС. Но это все еще не работает на Android N и позже. Когда я делаю все это, это не дает мне никакой ошибки, но все же это не работает. Я прилагаю фрагменты кода ниже, чтобы посмотреть и попытаться выяснить проблему. Спасибо, приятели.

Фрагмент кода, где я даю Не беспокоить доступ к приложению

public void onRingerPermissionsClicked(View view) {
    Intent intent = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
    }
    startActivity(intent);
}

Do Not Disturb Access Screenshot

Способ отключения телефона

setRingerMode(context, AudioManager.RINGER_MODE_SILENT);

Метод setRingerMode ()

private void setRingerMode(Context context, int mode) {
    NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    // Check for DND permissions for API 24+
    if (android.os.Build.VERSION.SDK_INT < 24 ||
            (android.os.Build.VERSION.SDK_INT >= 24 && !nm.isNotificationPolicyAccessGranted())) {
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        audioManager.setRingerMode(mode);
    }
}

1 Ответ

0 голосов
/ 14 мая 2018

Ваш способ работает только с API <23, после API 23 вам нужно использовать диспетчер уведомлений, чтобы перевести мобильный телефон в «режим DND», вот как вы можете это сделать. </p>

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);

Вы добавили разрешение на политику уведомлений в файле манифеста? если нет, то добавьте это,

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

вам нужно открыть отдельный диалог для получения разрешения режима DND, что вы можете сделать, выполнив,

// Проверить, разрешен ли доступ к политике уведомлений для приложения.

NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
     Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
     startActivity(intent);
 }
...