Разрешения Android: телефонные звонки: чтение состояния телефона и личности - PullRequest
69 голосов
/ 17 ноября 2009

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

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

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

Спасибо!

Ответы [ 2 ]

89 голосов
/ 17 ноября 2009

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

Покопавшись в 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" />

Вот и все.

Веселись, -Майк

24 голосов
/ 30 декабря 2009

История изменений Android 1.6: 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 или выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...