Pertanyaan ini cukup mengganggu saya. Jadi sekarang, akhirnya, saya memutuskan untuk menyelesaikan masalah ini.
Playstore memiliki aplikasi bernama izin.READ_PHONE_STATE , yang meminta READ_PHONE_STATE
sebagai satu-satunya izin, dan tidak melakukan apa pun selain mencetak semua data yang dapat diakses dengan atau tanpa menggunakannya. Saya telah menginstalnya di LG Optimus 4X saya , sedang di-root pada Android 4.0, dan mencabut izin menggunakan LBE. Hasil yang cukup menarik, seperti yang ditunjukkan tangkapan layar berikut:
Informasi yang dikumpulkan oleh izin aplikasi.READ_PHONE_STATE (klik gambar untuk varian yang lebih besar)
Seperti yang Anda dapat dengan mudah melihat, bahkan beberapa informasi dev meskipun tidak dapat diakses tanpa izin, dapat diakses secara bebas: nomor kotak surat saya (komentar: Ya, itu yang benar; dengan penyedia saya itulah jalan pintas ketika melakukan panggilan dari perangkat Anda sendiri, sehingga saya dapat bebas menampilkannya;) Pada akhir tangkapan layar pertama Anda melihat:
CALL_STATE_IDLE
. Jadi tidak ada panggilan telepon masuk, keluar, atau sedang berlangsung. Tidak ada aplikasi yang memerlukan izin ini untuk "melatarbelakangi" dirinya pada panggilan masuk.
Bahkan mungkin untuk melihat apakah data seluler aktif ( DATA_DISCONNECTED
; Saya menggunakan WiFi saat mengambil tangkapan layar, seperti yang dapat Anda lihat di bilah pemberitahuan), di negara mana Anda berada, penyedia Anda (termasuk beberapa data teknis tentangnya), apakah Anda memiliki kartu SIM, atau jika sedang roaming.
Satu-satunya hal yang tidak dapat diakses adalah mengidentifikasi data: IMEI, SIMID, IMSI, dan nomor telepon Anda sendiri.
Kesimpulan: Izin ini hanya diperlukan untuk tujuan identifikasi, tidak ada yang lain.
Mengapa begitu banyak aplikasi membutuhkannya?
- Untuk modul iklan, kemungkinan besar 1
- Karena dev berpikir dia membutuhkannya (seperti yang ditunjukkan oleh beberapa jawaban di sini) 2
- Karena aplikasi tersebut dirancang untuk (juga) berjalan di Android 1.5 dan di bawahnya (mudah ditemukan, seperti yang tercantum di Google Play ).
Kemungkinan persis urutan ini, IMHO.
1 Catatan oleh pos Dan di obrolan :
Kebijakan Google Play sekarang melarang aplikasi dari mendapatkan IMEI Anda untuk mengidentifikasi Anda untuk tujuan periklanan. Semua perpustakaan iklan telah diperbarui sekarang untuk menggunakan "ID iklan" yang disediakan Google-Play-Services, sehingga semua yang masih menggunakan IMEI untuk tujuan ini harus dilaporkan ke Google.
Karena sulit bagi pengguna untuk mengetahui untuk apa aplikasi menggunakan IMEI, Anda harus meminta pengembang untuk menjelaskan terlebih dahulu.
2 Pengembang lain baru saja menunjukkan kepada saya perbedaan yang tipis: sementara izin tidak diperlukan untuk membaca status panggilan saat ini (seperti yang telah saya tunjukkan), mungkin perlu mendaftarkan pendengar agar diberi tahu tentang perubahan panggilan status (lihat: Mendeteksi panggilan telepon masuk dan keluar di Android ). Meskipun tampaknya ada cara untuk menangani hal ini secara otomatis ketika sistem memanggil onPause
, itu mungkin tidak selalu cocok: pikirkan jam alarm Anda. Anda mungkin tidak ingin hal itu secara otomatis dihentikan pada panggilan masuk - terutama tidak ketika profil Anda diatur ke volume dering "dibisukan".
3 Sekali lagi koreksi dari Dan : Anda hanya mendapatkan izin ekstra default jika versi "target" aplikasi Anda adalah 1,5. Jika Anda menargetkan versi yang lebih baru tetapi versi min Anda 1,5, Anda tidak mendapatkan izin ditambahkan secara otomatis.
Pembaruan
- Menarik bahwa ada masalah terbuka (21504) untuk membagi
READ_PHONE_STATE
apa yang diperlukan untuk a) mendeteksi panggilan masuk dan yang terkait (telepon), dan izin kedua untuk rincian identifikasi (IMEI, IMSI, dll). Dibuka 11/2011, masih belum bekerja. Bintangi jika tertarik :)
- Dan ya, ada cara untuk mencapai (panggilan masuk mendeteksi) yang sama tanpa yang
READ_PHONE_STATE
izin, seperti misalnya ditunjukkan oleh Arno Welzel . Sebagai panggilan telepon masuk akan memicu dering, yang acara dapat digunakan dengan onAudioFocusChange()
, yang tidak memerlukan izin khusus: jika dipicu oleh itu, aplikasi bisa memeriksa CallState (sekali lagi, tanpa izin khusus diperlukan) untuk melihat apakah ada sebuah panggilan masuk.