2016-12-23 6 views
0

Я пытаюсь установить Ringer беззвучный и не беспокоить с приоритетом только с помощью следующейразрешений, необходимых для NotificationManager

AudioManager myAudioMgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
NotificationManager myNOtificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

myAudioMgr.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
myNOtificationMgr.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY); 

Я получаю ошибку безопасности

java.lang. RuntimeException: невозможно запустить приемник MyBroadcastReceiver: java.lang.SecurityException: доступ к политике доступа запрещен

Я добавил уведомление о доступе Разрешение политики на мой файл манифеста

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

У меня нет дополнительного разрешения?

+2

Какая версия Android? Я знаю, что в последней версии вам нужно запросить разрешение через диалог, прежде чем вы сможете его использовать. Разрешения Manifest доступны только для устаревших устройств, и поэтому они могут отображать использование разрешений на рынке. –

+0

Минимальный и целевой API: 23 – jradich1234

+0

Посмотрите на это: https://developer.android.com/training/permissions/requesting.html –

ответ

1

Похоже, пользователю необходимо явно предоставить разрешение на приложение через экран настроек, чтобы приложение могло управлять приоритетом/типом с помощью уведомлений api. Я предполагаю, что для этого используется класс notificationManager. Некоторые ссылки, которые могут помочь вам:

https://developer.android.com/reference/android/provider/Settings.html#ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS

https://developer.android.com/reference/android/app/NotificationManager.html#ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED

Я думаю, что в основном то, что вам нужно сделать, это прямой пользователь на «Показать Не беспокоить настройки доступа» и иметь его включить опцию управление уведомлений (Нечто подобное для того, что бы вы сделали для макета места, например)

примера код:

startActivityForResult(new Intent(android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS), 0); 

Надеюсь, это поможет.

+0

Это вопрос точно !! Спасибо за помощь! – jradich1234

-1

Вам нужно сделать что-то вроде

public class SomeFragment extends FragmentCompat { 
    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     int permissionNotifications = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission. ACCESS_NOTIFICATION_POLICY); 

     if (permissionNotifications != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(
        getActivity(), 
        new String[] { Manifest.permission.ACCESS_NOTIFICATION_POLICY }, 
        PERMISSION_REQUEST 
      ); 
     } 
    } 
} 

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

+0

ACCESS_NOTIFICATION_POLICY не является опасным разрешением ... – Selvin

+1

Неверный ответ ... – user2511882

+0

@ user2511882 Я согласен с тем, что запрашивающее разрешение явно не требуется. Когда я проверяю ContextCompat.checkSelfPermission для ACCESS_NOTIFICATION_POLICY, я получаю PackageManager.PERMISSION_GRANTED. – jradich1234

0

От разработчиков Android:

Запросить доступ к политике, отправив пользователя в действие, которое соответствует действию системного намерения ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS.

Использование ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED для прослушивания пользователь предоставляет или отрицает этот доступ.

Таким образом, чтобы получить разрешение, вы должны запросить доступ к политике, отправляя пользователя на деятельность, которая соответствует системе намерений ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS действий и прослушивание ответа с помощью BroadcastReceiver с действием ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED.

Также обратите внимание на метод isNotificationPolicyAccessGranted() из NotificationManager, чтобы проверить, разрешено ли разрешение.

0

Для исправления ошибки java.lang.SecurityException: Access denied to process: 3454, анкета Android должна быть добавлена ​​android.permission.SET_WALLPAPER.

Добавьте следующую строку в AndroidManifest.xml:

uses-permission android:name="android.permission.SET_WALLPAPER"