Di Android Marshmallow, izin harus diminta saat runtime saat diperlukan, bukan sekaligus saat aplikasi diinstal. Namun, sepertinya saya hanya dapat meminta izin dari suatu Aktivitas, yang menjadi masalah karena aplikasi saya hanya berisi Layanan. (Mengapa begitu, Anda mungkin bertanya? Aplikasi ini memiliki tampilan jam Android Wear yang dipaketkan di dalamnya, dan yang dilakukan ponsel hanyalah mencari foto di sekitar untuk dikirim ke jam tangan - tidak perlu Aktivitas. Tetapi aplikasi ini memerlukan izin lokasi.)
Jadi, adakah cara untuk meminta izin dari Layanan? Atau entah bagaimana memaksa untuk diberikan izin pada waktu penginstalan seperti di masa lalu?
android
wear-os
android-permissions
android-6.0-marshmallow
Tony Wickham
sumber
sumber
Jawaban:
requestPermission()
hanya dapat dipanggil dariActivity
dan bukan aService
(tidak seperticheckPermission()
yang hanya membutuhkanPackageManager
). Jadi, Anda perlu melakukan pekerjaan ekstra untuk menyiasatinya; Anda perlu memberikannyaActivity
di aplikasi Anda dan, misalnya, AndaService
dapat memeriksa izin yang diperlukannya dan jika izin tersebut belum diberikan, itu dapat membuat pemberitahuan dan yang dapat memberi tahu pengguna dengan pesan singkat deskriptif tentang mengapa ada pemberitahuan dan apa yang perlu terjadi ketika mereka mengeklik pemberitahuan, dll.sumber
Context
mana saja yang juga diimplementasikanOnRequestPermissionsResultCallback
. Fungsinya mirip dengan standarrequestPermission()
.Saya setuju, ini sangat merepotkan untuk layanan, saya pikir Anda harus melaporkan masalah di halaman Pratinjau Pengembang Android untuk ini.
Saat ini, menurut saya solusi terbaik adalah memeriksa izin layanan, dan menampilkan pemberitahuan jika izin tidak ada. Lebih baik lagi, buat DialogActivity untuk meminta izin ketika pengguna menekan notifikasi.
sumber
Lihat perpustakaan PermissionEverywhere . Ini memungkinkan Anda untuk meminta izin dari konteks apa pun.
Ini membuat pemberitahuan mengklik yang membuka aktivitas yang meminta izin.
Kode contoh dari halaman github perpustakaan: -
sumber
PermissionEverywhere
, pastikan Anda mendeklarasikan aktivitas helper dalam manifes Anda DAN pastikan bahwa saat Anda mendeklarasikannya, aktivitas tersebut terkait dengan paket yang benar (jika Anda menggunakanPermissionEverywhere
sebagai paket terpisah). Butuh waktu lama bagi saya untuk menyadari bahwa sebenarnya saya tidak menentukanPermissionEverywhere
paket dalam manifes.PermissionEverywhere
aplikasi demo dan tidak berhasil.Ada perpustakaan yang sangat sederhana yang memungkinkan melakukan hal ini. Anda dapat memeriksa izin dari mana saja (bahkan dari layanan), berdasarkan apakah aplikasi berada di latar depan atau latar belakang, aplikasi tersebut menampilkan dialog normal atau menghasilkan pemberitahuan yang meminta izin. Kode ini sangat mudah dipahami dan juga sangat mudah digunakan.
Cobalah: Izin Android
sumber
Anda dapat menggunakan
ResultReceiver
untuk membuat penerima jawaban pengguna, lalu meneruskannya sebagai panggilan balik ke Aktivitas, melalui notifikasiPendingIntent
. Referensisumber