Mam aplikację działającą na zrootowanym tablecie z Androidem bez nazwy z systemem ICS 4.0.3, który steruje urządzeniem USB za pośrednictwem interfejsu trybu hosta USB. Plik android.hardware.usb.host.xml jest obecny w / system / etc / permissions i wszystko działa wspaniale. Z wyjątkiem...
Gdy uruchamiam aplikację po raz pierwszy po ponownym uruchomieniu, a następnie podłączam urządzenie USB, pojawia się wyskakujące okienko z komunikatem „Zezwolić aplikacji APPNAME na dostęp do urządzenia USB? [] Używać domyślnie dla tego urządzenia USB. Anulować OK” i Muszę nacisnąć OK, zanim będzie można rozpocząć korzystanie z urządzenia.
Muszę wyłączyć potwierdzenie użytkownika, aby aplikacja mogła od razu korzystać z urządzenia. Jak mam to zrobic? Wydaje mi się kilka sugestii dotyczących używania generatora naciśnięć klawiszy do symulacji użytkownika dotykającego przycisku na ekranie, ale wolałbym unikać tego rodzaju podejścia i konfigurować takie ustawienia, aby żądanie potwierdzenia po prostu nie nastąpiło.
Prawdopodobnie nie mogę zmusić dostawcy do wykonania dla mnie niestandardowej kompilacji jądra, ale powinienem móc uzyskać od nich klucz do podpisywania oprogramowania układowego, aby mógł podpisać moją aplikację jako aplikację systemową, jeśli to pomoże.
Jeden związany z tym problem: zaznaczenie pola „Domyślnie używaj dla tego urządzenia USB” nie wydaje się pomocne - jeśli odłączę i ponownie podłączę urządzenie, ponownie otrzymam monit o potwierdzenie. Zauważyłem w tej sytuacji, że numer urządzenia w / dev / bus / usb / 001 / zmienia się za każdym razem, gdy odłączam i ponownie uruchamiam (001, 002, 003 itd.), Co być może wyjaśnia ten konkretny problem.
źródło
Odpowiedzi:
To pytanie i odpowiedź jest w zasadzie duplikatem
/programming//a/15151075/588476
Zobacz powyższy link, aby zobaczyć przykładowy program i bardziej szczegółową dyskusję.
O ile mi wiadomo, istnieją dwa sposoby uzyskania wyskakującego okienka zezwolenia USB:
W przypadku 1 stwierdziłem, że pole wyboru w wyskakującym okienku do zapamiętania pozwolenia nie ma wpływu.
Dla mnie usunąłem cały kod związany z uprawnieniami z mojego oprogramowania i po prostu umieściłem filtr zamiaru w moim manifeście. Gdy urządzenie USB jest podłączone, jeśli nie zostało mu jeszcze przyznane pozwolenie, pojawi się okno zezwolenia USB. Jeśli użytkownik kliknie przycisk OK bez zaznaczenia pola zapamiętywania, okno pojawi się ponownie przy następnym podłączeniu urządzenia. Jeśli jednak użytkownik zaznaczy pole i naciśnie przycisk OK, okno nigdy nie powinno się ponownie wyświetlać (chyba że oprogramowanie zostanie odinstalowane, a następnie ponownie zainstalowane).
Nie jestem pewien, czy istnieje jakiś błąd związany z twoim urządzeniem, który pojawia się jako / dev / bus / usb / 001, a następnie 002 itd. - daj mi znać, jeśli używasz filtru zamiarów, ponieważ bez tego pola wyboru zapamiętaj nic nie robić.
Nie znam żadnego sposobu na całkowite uniknięcie wyskakującego okienka zezwolenia. Podejrzewam, że nie ma sposobu, aby to zrobić bez zagłębiania się w kod Androida, jak powiedziałeś.
źródło
Po moim komentarzu zajrzałem do kodu Androida.
Mam możliwą odpowiedź, ale z nie mniej niż czterema głównymi zastrzeżeniami i przeszkodami:
Zapomnij o tym, jeśli wdrażasz zwykłe aplikacje z rynku wtórnego!
Pierwszym warunkiem jest posiadanie
MANAGE_USB
pozwolenia. To jest opisane tutaj .Jednak z kolei warunkiem jest podpisanie się przy użyciu klucza systemowego i zainstalowanie aplikacji w / system / app.
W każdym razie, jeśli nie masz nic przeciwko, oto kod:
mDevice
to urządzenie z przeszłości.uid
jest identyfikatorem UID Twojej aplikacji i możesz to sprawdzić. Przykładem tego jest pierwsza odpowiedź tutaj .Wszystko dobrze? Nie.
ServiceManager
Toandroid.os.ServiceManager
nie jest publiczny interfejs API. W tym przykładzie jest to sposób na uzyskanie dostępu doIUsbManager
usługi (mogą istnieć inne trasy). Teraz obejście tego jest poza zakresem mojej odpowiedzi; w dawnych czasach można było używać refleksji, ale nie wiem, czy nadal możesz.Po tych wszystkich shenaniganach wygląda na to, że nie musisz już prosić o pozwolenie, a jeśli to zrobisz, natychmiast wróci bez dialogu.
źródło