Подтвердить что ты не робот

Android-разрешения: телефонные звонки: состояние и идентификация состояния телефона

Мое приложение для Android не имеет ничего общего с телефонными звонками, но я вижу, что когда я устанавливаю сборку отладки на своем тестовом устройстве, для этого требуются разрешения "Телефонные звонки: читать состояние телефона и личность". (Я не упоминаю об этом в AndroidManifest.xml).

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

Я нашел этот отчет об ошибке: http://code.google.com/p/android/issues/detail?id=4101, но он помечается как работающий с запиской о правильности разрешений с рынка, но не иначе. Это другие люди? (Мне бы не хотелось публиковать на рынке, чтобы проверить это.) В противном случае кто-нибудь знает, есть ли API, с которым я могу избежать вызова, что сделает его таким, чтобы мое приложение не нуждалось в этом разрешении?

Спасибо!

4b9b3361

Ответ 1

(Отвечая на мой собственный вопрос, если кто-то еще сталкивается с этой проблемой и ищет его.)

Копаясь в PackageParser.java в источнике android, я узнал, что система автоматически назначит

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE

для любого приложения, которое объявляет версию targetSdk менее 4 (пончик). Для этого должна быть причина совместимости, возможно, приложения, ориентированные на более старые версии, могут предположить, что у них есть эти разрешения, не объявляя их явно. Таким образом, если вы не хотите, чтобы эти разрешения были добавлены в ваше приложение неявно, добавьте в AndroidManifest.xml раздел, следующий за

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />

Вот и все.

Удачи, -Mike

Ответ 2

Android 1.6 changelog: http://developer.android.com/sdk/android-1.6.html#api

WRITE_EXTERNAL_STORAGE. Позволяет приложение для записи на внешние место хранения. Приложения с использованием уровня API 3 и ниже будут неявно предоставлены это разрешение (и это будет видимый пользователю); Приложения использование API уровня 4 или выше должно явным образом запрошу это разрешение.

Но это только один из них. По какой-то причине в официальном журнале изменений отсутствует информация о READ_PHONE_STATE. Здесь раскрывается полная история: http://blogs.zdnet.com/Burnette/?p=1369&page=3

Новые разрешения. 1.6 программы должны явно запросить WRITE_EXTERNAL_STORAGE. иметь возможность изменять содержимое SD-карты, и они должны явно запросите READ_PHONE_STATEразрешение иметь возможность получить информацию о состоянии телефона. Программы таргетинг на ранние версии всегда будет запросите эти разрешения неявно.

Итак, как вы можете видеть, нет способа опубликовать приложение, ориентированное на 1.5 или более раннее, без запроса этих разрешений при установке на телефонах с версией 1.6 или выше.