Intereting Posts
ActivityNotFoundException (YES, это действие объявлено в AndroidManifest.xml) Изменение значков TabLayout слева, сверху, справа или снизу в com.android.support:design:23.1.0 Ури по умолчанию звуковое уведомление? Преобразование текста строки в битмап Как использовать Android xliff: g Как включить сторонние файлы cookie в Phonegap и Android 3.2? Adb push / pull с индикатором выполнения Каков правильный способ связи с пользовательским представлением на активность, в которой он находится? Невозможно добавить дочернего узла, у которого нет узла CSS для узла без функции измерения Что заставляет инструмент jobb запускать FAT Full IOException? Как утверждать внутри RecyclerView в Espresso? Список и названия жестов сенсорного экрана Позиционирование MediaController Как проверить естественную ориентацию устройства (по умолчанию) на Android (т. Е. Получить пейзаж, например, Motorola Charm или Flipout) Как сделать изображение как можно большим, сохраняя соотношение сторон

Почему мое приложение запрашивает разрешение на использование телефона?

В моем манифесте я прошу только эти два разрешения:

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

Но когда я устанавливаю приложение на свой телефон, я также получаю это уведомление:

 Low-risk permissions Phone ID Get your phone ID, including IMEI, IMSI, etc. 

Из того, что я собираю из этого ответа SO , мне нужно использовать TelephonyManager и позвонить

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

Потребовать это разрешение. Но я не использую TelephonyManager или не вызываю это разрешение. Я не хочу просить пользователей дать это разрешение. Я просмотрел свои файлы манифеста и градации. Может быть, какой-то код, который я использовал, вызвал это разрешение, вызванное без меня, специально спрашивающего об этом? Я знаю, что я не даю тебе многого, я не знаю, где еще искать.

Обновление 1

Я создал совершенно новый проект в Android Studio и создал из него подписанный APK. Я установил его, но никаких разрешений не было задано. (Это, по крайней мере, подтвердило для меня, что это не была «новая функция» в Android Studio, которая автоматически запрашивала это разрешение.)

Обновление 2

Что касается ответа @ antonio, то я нашел app/build/outputs/logs/manifest-merger-release-report.txt Однако я не нашел требуемых разрешений.

Обновление 3

Вот зависимости, которые использует мое приложение (от gradle.build):

 dependencies { compile 'com.android.support:support-v4:21.0.3' compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' } 

Я тестировал новое приложение с обеих этих зависимостей, и никаких разрешений не запрашивалось.

Мой следующий шаг – добавить все действия снова с нуля и посмотреть, могу ли я найти, где это разрешение начинает получать. Продолжение следует…

Обновление 4

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

Обновление 5

Я установил targetSdkVersion в 1. Это дает новое сообщение при объявлении разрешений перед установкой приложения:

Читать статус телефона и личность

Приложение сможет получать доступ к функциям телефона устройства. Это разрешение позволяет приложению определять номер телефона и идентификаторы устройств, независимо от того, активен ли звонок и удаленный номер, связанный с вызовом.

Знание о разрешении старого телефона, о котором я писал в начале, все еще существует (появляется после установки приложения). Это заставляет меня задаться вопросом, связано ли это с ОС (я использую MIUI Android на телефоне Xiaomi). В приложении все еще есть что-то, что заставляет его отображать в этом приложении, но не в других приложениях. Мне нужно проверить это на других устройствах.

Solutions Collecting From Web of "Почему мое приложение запрашивает разрешение на использование телефона?"

Это происходит из-за того, что вы импортируете библиотеку с targetSdkVersion ниже целевого целевого приложения вашего приложения

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

При импорте библиотеки с targetSdkVersion ниже, чем импортируемое приложение targetSdkVersion, некоторые разрешения могут быть автоматически добавлены в результирующий объединенный файл манифеста. Это необходимо, поскольку такие библиотеки ориентированы на время выполнения, когда такие разрешения были неявно предоставлены. Поэтому объявление такого разрешения не было необходимым. Однако в более поздних версиях Android эти разрешения не предоставляются автоматически. Поэтому библиотека, ориентированная на такую ​​старую рабочую среду без разрешений, не будет работать должным образом после объединения в приложении, ориентированного на более позднюю среду выполнения.

Разрешения, которые могут быть добавлены:

  • WRITE_EXTERNAL_STORAGE Добавлен при импорте библиотеки с targetSdkVersion <4
  • READ_EXTERNAL_STORAGE Добавлен при импорте библиотеки, которая объявила WRITE_EXTERNAL_STORAGE
  • READ_PHONE_STATE Добавлен при импорте библиотеки с targetSdkVersion <4
  • READ_CALL_LOG Добавлен при импорте библиотеки с targetSdkVersion <16 и использованием разрешения READ_CONTACTS
  • WRITE_CALL_LOG Добавлен при импорте библиотеки с targetSdkVersion <16 и использованием разрешения WRITE_CONTACTS

Вы можете проверить отчет, сгенерированный с помощью Manifest Merger (In \ app \ build \ output \ apk \ manifest-merger-XXX-report), чтобы узнать, какая библиотека вызвала добавление разрешения READ_PHONE_STATE. Вы увидите что-то вроде:

 android:uses-permission#android.permission.READ_PHONE_STATE IMPLIED from AndroidManifest.xml:2:1 reason: the.library has a targetSdkVersion < 4 

Добавьте следующий код в свой AndroidManifest.xml, чтобы удалить ненужные разрешения:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" /> 

Источник:

https://stackoverflow.com/a/27542669/406295