Разрешения 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 или выше.

Другие вопросы по тегам