Разрешение запроса 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.


person originof    schedule 16.10.2016    source источник
comment
Итак, что я должен сделать, чтобы запросить разрешения на уведомления? -- нет. Во-первых, вы избавляетесь от этого Java-кода. Затем вы избавляетесь от этого элемента <uses-permission>. BIND_NOTIFICATION_LISTENER_SERVICE — это системное разрешение, которое ваше приложение не может иметь.   -  person CommonsWare    schedule 16.10.2016


Ответы (3)


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

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

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

person Mohammed Atif    schedule 16.10.2016

Из документации

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>
person fluffyBatman    schedule 16.10.2016

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

ЧИТАТЬ_КАЛЕНДАРЬ, ЗАПИСАТЬ_КАЛЕНДАРЬ

КАМЕРА

READ_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTS

ACCESS_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

ОТПРАВИТЬ_SMS, ПОЛУЧИТЬ_SMS, ПРОЧИТАТЬ_SMS, ПОЛУЧИТЬ_WAP_PUSH, ПОЛУЧИТЬ_MMS

READ_EXTERNAL_STORAGE, ЗАПИСЬ_EXTERNAL_STORAGE

person Vyacheslav    schedule 16.10.2016