Це питання мене хвилює вже досить давно. Тому зараз, нарешті, я вирішив дійти до низу питання.
Playstore є додаток під назвою permission.READ_PHONE_STATE , який запитує в READ_PHONE_STATE
якості єдиного дозволу, і нічого не робить , ніж друк всіх даних , які він може отримати доступ з або без його використання. Я встановив це на своєму LG Optimus 4X , будучи вкоріненим на Android 4.0.3, і відкликав дозвіл за допомогою LBE. Результати, де досить цікаві, як показують наступні скріншоти:
Інформація, зібрана дозволом програми.READ_PHONE_STATE (натисніть зображення для більших варіантів)
Як ви легко бачите, навіть деяка інформація, яка була недоступною без дозволу, була вільно доступною: номер моєї поштової скриньки (зауваження: Так, це правильний; у мого провайдера це ярлик під час набору номера з вашого власного пристрою, тому я можу вільно показуйте його;) В кінці першого екрана ви бачите:
CALL_STATE_IDLE
. Тож жоден телефонний дзвінок не входить, не йде або триває. Жоден додаток не потребує цього дозволу, щоб "фонувати" себе при вхідних дзвінках.
Можна навіть побачити, чи активні дані мобільного зв’язку ( DATA_DISCONNECTED
; я був у WiFi, коли робив знімки екрана, як ви бачите на панелі сповіщень), у якій країні ви перебуваєте, у вашого постачальника (включаючи деякі технічні дані щодо нього), чи у вас SIM-карта або в роумінгу.
Єдине , що НЕ доступний , отже , ідентифікують дані: IMEI, SIMID, IMSI і свій номер телефону.
Висновок: Цей дозвіл потрібен лише для ідентифікації, нічого іншого.
Чому тоді потрібна стільки додатків?
- Для рекламних модулів, швидше за все, 1
- Тому що дев подумав, що йому це потрібно (на що вказують деякі відповіді тут) 2
- Оскільки програма, про яку йдеться, розроблена для (також) роботи на Android 1.5 і нижче (це легко дізнатися, як це вказано в Google Play ).
Ймовірність саме в такому порядку, ІМХО.
1 Примітка від публікації Дана у чаті :
Зараз політика Google Play забороняє додаткам отримувати ваш IMEI для ідентифікації вас для рекламних цілей. Усі бібліотеки оголошень уже оновлено, щоб використовувати наданий Google-Play-Services "рекламний ідентифікатор", тому будь-які, які все ще використовують IMEI для цієї мети, повинні бути повідомлені Google.
Оскільки користувачеві важко сказати, для чого додаток використовує IMEI, вам слід попросити розробника спочатку пояснити.
2 Інший розробник просто вказав на тонку різницю: хоча дозвіл не потрібен для читання поточного стану виклику (як я вже вказував), можливо, знадобиться зареєструвати слухача , щоб отримувати сповіщення про зміни дзвінка. стан (див. Визначення вхідних та вихідних телефонних дзвінків на Android ). Хоча, здається, є засоби для автоматичного вирішення цього питання, коли система дзвонить onPause
, це може бути не завжди підходить: подумайте про свій будильник. Можливо, ви не хочете, щоб це було автоматично зупинено під час вхідного дзвінка, особливо не тоді, коли для вашого профілю встановлено, що гучність дзвінка "вимкнено".
3 Знову виправлення від Dan : Ви отримуєте додатковий дозвіл за замовчуванням лише у тому випадку, якщо "цільова" версія програми становить 1,5. Якщо ви націлюєте на більш пізню версію, але ваша мінімальна версія 1,5, дозвіл не буде додано автоматично.
Оновлення
- Цікаво, що існує відкрита проблема (21504), яку слід розділити
READ_PHONE_STATE
на те, що потрібно для: a) виявлення вхідних дзвінків і пов'язаних з ними (телефонія), а також другий дозвіл на ідентифікаційні дані (IMEI, IMSI тощо). Відкрито 11/2011, і досі не працює. Позначте зірочкою, якщо цікаво :)
- І так, є спосіб досягти того ж (виявляючи вхідні дзвінки) без з
READ_PHONE_STATE
дозволу, як , наприклад , зазначив Арно Welzel . Оскільки вхідний телефонний дзвінок спричинить дзвінок, ця подія може бути використана onAudioFocusChange()
, і це не вимагає спеціального дозволу: якщо це буде викликано, додаток може перевірити CallState (знову ж таки, без спеціального дозволу), щоб побачити, чи є Вхідний виклик.