0

Почему этот код работает:разрешения Android запрос не работает для разрешения уведомлений

ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.READ_CONTACTS}, 
      666); 

## In the manifest 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 

и этот код не работает:

ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE}, 
      666); 

## In the manifest 
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" /> 

Первый фрагмент начинает деятельность разрешения запроса просить читать права доступа к контактам. последний фрагмент не показывает активность и в журналах есть это сообщение:

10-16 12:19:48.061 1138-3635/? I/ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity (has extras)} from uid 10147 on display 0 

Итак, что я должен сделать, чтобы спросить разрешение уведомлений? Целевой API - v24, а минимальная версия sdk - 23.

+2

«Итак, что я должен сделать, чтобы спросить noti разрешений на выдачу? " - Нет. Во-первых, вы избавитесь от этого Java-кода. Затем вы избавитесь от элемента ''. 'BIND_NOTIFICATION_LISTENER_SERVICE' - системное разрешение, которое ваше приложение не может удерживать. – CommonsWare

ответ

2

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

https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

P.S. независимо от разрешения, является опасным или нормальным, оба должны быть объявлены в манифесте, только разница в запросах времени выполнения.

1

От documentation

BIND_NOTIFICATION_LISTENER_SERVICE 

String BIND_NOTIFICATION_LISTENER_SERVICE 

Must be required by an NotificationListenerService, to ensure that only the system can bind to it. 

Что означает, что он не обязательно должен предоставлять пользователем во время выполнения. Скорее, он должен быть объявлен в manifest.xml под номером NotificationListenerService. Что-то вроде этого,

<service android:name=".NotificationListener" 
      android:label="@string/service_name" 
      android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
    <intent-filter> 
     <action android:name="android.service.notification.NotificationListenerService" /> 
    </intent-filter> 
</service> 
0

Здесь Вы можете увидеть список прав, которые вы должны спросить https://developer.android.com/guide/topics/security/permissions.html

READ_CALENDAR, WRITE_CALENDAR

CAMERA

READ_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTS

AC CESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, RECORD_AUDIO

READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL USE_SIP, PROCESS_OUTGOING_CALLS

BODY_SENSORS

SEND_SMS, RECEIVE_SMS, READ_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMS

READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE

Смежные вопросы