Intereting Posts
Как отображать изображение в приложении для Android Получение `Error: Can not get property ': lib' on null object` в новом проекте Android Studio Как сделать анимацию для всплывающего окна в android Как использовать IntentCompat.makeRestartActivityTask ()? Получить UID Linux для Android-приложения Неверное изображение, отображаемое с помощью библиотеки Glide CSS / HTML – dp (независимые от плотности) единицы? OverridePendingTransition не работает Ошибка c2dm 401 при отправке сообщений после приема идентификатора и токена аутентификации Как войти в OAuth 2.0 с помощью пользовательских вкладок Chrome (Fitbit API) Android Аннотации: Аннотированный класс Xyz_ не находит его оригинальным («не может найти символ класса Xyz») SetRotation (90) для съемки в портретном режиме не работает на устройствах samsung Как перенести определенный элемент в список массивов на первый элемент Анализировать файл дампа памяти HPROF из командной строки Закладка макета Android для динамически добавленного вида

Android, найти все места в коде для запроса разрешений

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

Возникает вопрос: как найти все места в коде, где нужно запрашивать разрешение? Я использую Android Studio.

РЕДАКТИРОВАТЬ
Некоторые люди предлагают изменить api на 23 и просто запустить приложение и посмотреть места, где он падает. Проблема в том, что приложение не разбивается во всех местах.

Например, запуск этого кода без разрешения приведет к сбою приложения:

TelephonyManager manager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); 

Пока этот только возвращает пустой массив, а не сбой.

 final String[] SELF_PROJECTION = new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,}; Cursor cursor = context.getContentResolver() .query(ContactsContract.Profile.CONTENT_URI, SELF_PROJECTION, null, null, null); 

Кроме того, Android Lint не показывает эти места. Я не уверен, что так должно быть.

Solutions Collecting From Web of "Android, найти все места в коде для запроса разрешений"

Согласно странице разработчика относительно разрешений безопасности :

Однако почти во всех случаях в системный журнал будет напечатан отказ доступа.

Поэтому запустите приложение и выполните поиск в журнале для «разрешений» или аналогичного.

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

Добавить

 lintOptions { enable 'MissingPermission' } 

В вашем build.gradle . Это покажет предупреждения после создания вашего приложения.

Конечно, скомпилируйте таргетинг api 23, не добавляйте в код разрешений, запустите приложение и посмотрите, где он сбой.

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

Logcat довольно описательный, позволяя вам знать, что разрешения запрещены …

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

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

Это не лучшая практика , но это ответ на этот вопрос.