Saya memiliki aplikasi yang berjalan pada tablet Android tanpa nama berakar yang menjalankan ICS 4.0.3 yang mengontrol perangkat USB melalui antarmuka mode host USB. File android.hardware.usb.host.xml ada di / system / etc / permissions dan semuanya bekerja dengan sangat baik. Kecuali...
Ketika saya menjalankan aplikasi untuk pertama kalinya setelah reboot dan kemudian tancapkan perangkat USB saya mendapatkan jendela sembulan yang mengatakan "Izinkan aplikasi APPNAME untuk mengakses perangkat USB? [] Gunakan secara default untuk perangkat USB ini. Batalkan OK" dan Saya harus mengetuk OK sebelum dapat mulai menggunakan perangkat.
Saya perlu mematikan konfirmasi pengguna agar aplikasi dapat langsung menggunakan perangkat. Bagaimana saya melakukan ini? Saya sepertinya memiliki beberapa saran tentang penggunaan generator tombol untuk mensimulasikan pengguna mengetuk tombol di layar, tetapi saya lebih suka menghindari pendekatan semacam itu dan mengatur semuanya sehingga permintaan konfirmasi tidak terjadi.
Saya mungkin tidak dapat meminta pemasok untuk membuat kernel kustom untuk saya, tetapi saya harus bisa mendapatkan kunci penandatanganan firmware dari mereka sehingga saya dapat menandatangani aplikasi saya sebagai aplikasi sistem, jika itu akan membantu.
Satu masalah yang terkait: mencentang kotak "Gunakan secara default untuk perangkat USB ini" tampaknya tidak membantu - jika saya mencabut dan memasang kembali perangkat maka saya mendapatkan konfirmasi lagi. Saya perhatikan dalam situasi ini bahwa nomor perangkat di / dev / bus / usb / 001 / berubah setiap kali saya mencabut dan memasang kembali (001, 002, 003 dll) yang mungkin menjelaskan masalah ini.
sumber
Jawaban:
Pertanyaan dan jawaban ini pada dasarnya adalah duplikat dari
/programming//a/15151075/588476
Lihat tautan di atas untuk contoh program dan lebih banyak diskusi mendalam.
Sejauh yang saya tahu, ada dua cara untuk mendapatkan popup kotak izin USB:
Dalam kasus 1 saya telah menemukan bahwa kotak centang pada popup untuk mengingat izin tidak berpengaruh.
Bagi saya, saya menghapus semua kode yang terkait dengan izin dari perangkat lunak saya dan cukup meletakkan filter maksud di manifes saya. Ketika perangkat USB dicolokkan, jika belum diberikan izin maka kotak izin USB akan muncul. Jika pengguna mengklik OK tanpa mencentang kotak ingat, maka kotak akan muncul kembali saat berikutnya perangkat terhubung. Namun jika pengguna mencentang kotak dan menekan OK maka kotak tersebut seharusnya tidak pernah ditampilkan lagi (kecuali jika perangkat lunak dihapus dan kemudian diinstal ulang).
Saya tidak yakin apakah ada bug di suatu tempat yang terkait dengan perangkat Anda muncul sebagai / dev / bus / usb / 001 dll. 002 - beri tahu saya jika Anda menggunakan filter maksud, karena tanpa itu kotak centang ingat akan tidak melakukan apapun.
Saya tidak tahu cara apa pun yang dapat Anda hindari popup izin sama sekali. Saya menduga tidak ada cara untuk melakukannya tanpa menggali ke dalam kode android seperti yang Anda katakan.
sumber
Lebih jauh ke komentar saya, saya telah melihat ke dalam kode Android yang mendasarinya.
Saya punya jawaban yang mungkin, tetapi dengan tidak kurang dari empat peringatan utama dan rintangan:
Lupakan ini jika menggunakan aplikasi after-market biasa!
Prasyarat pertama adalah Anda memiliki
MANAGE_USB
izin. Itu dijelaskan di sini .Namun pada gilirannya prasyarat untuk itu adalah Anda masuk dengan kunci sistem, dan Anda menginstal aplikasi Anda ke / system / app.
Bagaimanapun, jika Anda setuju dengan itu, berikut ini beberapa kode:
mDevice
adalah perangkat dari sebelumnya.uid
adalah UID aplikasi Anda sendiri dan Anda dapat mencarinya. Contoh cara melakukannya adalah jawaban pertama di sini .Semuanya bagus? Tidak.
ServiceManager
Iniandroid.os.ServiceManager
dan karenanya bukan API publik. Itu, dalam contoh ini, adalah cara Anda untuk mendapatkanIUsbManager
layanan (mungkin ada rute lain). Sekarang, menyiasati hal itu di luar jangkauan jawaban saya; di masa lalu Anda bisa menggunakan refleksi, tetapi saya tidak tahu apakah Anda masih bisa.Setelah semua kejahatan itu, sepertinya Anda tidak perlu meminta izin lagi, dan jika Anda melakukannya, itu akan segera kembali tanpa dialog.
sumber