Разрешения Android: телефонные звонки: чтение состояния телефона и личности
Мое приложение для Android не имеет ничего общего с телефонными звонками, но я вижу, что когда я устанавливаю отладочную сборку на моем тестовом устройстве, ему требуются разрешения "Телефонные звонки: чтение состояния телефона и идентификация". (Я не упоминаю об этом в AndroidManifest.xml
).
Я хотел бы иметь минимально возможные разрешения и задавался вопросом, знает ли кто-нибудь, как от этого избавиться? Я закомментировал часть, где я записывал некоторые вещи из Build.MODEL
, Build.VERSION.*
и т. д. Я также прокомментировал ту часть, где обнаруживал альбомную / портретную ориентацию, думая, что это может быть "состоянием телефона". Но ни один из них, казалось, не снимал этого разрешения.
Я нашел этот отчет об ошибке: http://code.google.com/p/android/issues/detail?id=4101 но он помечен как работающий по назначению с пометкой о том, что разрешения на рынке правильные, но не иначе. Это опыт других людей? (Я бы не хотел публиковаться на рынке только для того, чтобы проверить это.) В противном случае, кто-нибудь знает, есть ли API, который я могу избежать, чтобы вызывать его, чтобы мое приложение не нуждалось в этом разрешении?
Спасибо!
2 ответа
(Отвечая на мой собственный вопрос на случай, если кто-то столкнется с этой проблемой и найдет ее.)
Покопавшись в 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" />
Это все.
Веселись, -Майк
Список изменений Android 1.6: http://developer.android.com/sdk/android-1.6.html
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 или выше.