W systemie Android Marshmallow żądania uprawnień należy żądać w czasie wykonywania, gdy są potrzebne, zamiast wszystkich naraz podczas instalowania aplikacji. Jednak wydaje mi się, że żądam uprawnień tylko od działania, co jest problemem, ponieważ moja aplikacja zawiera tylko usługi. (Dlaczego tak jest, możesz zapytać? Aplikacja ma w zestawie tarczę zegarka Android Wear, a jedyne, co robi telefon, to wyszukiwanie zdjęć w pobliżu, aby wysłać je do zegarka - nie jest wymagana żadna aktywność. Ale wymaga uprawnień do lokalizacji).
Czy jest więc sposób zażądania uprawnień od usługi? Lub w jakiś sposób wymusić przyznanie uprawnień w czasie instalacji, tak jak w przeszłości?
android
wear-os
android-permissions
android-6.0-marshmallow
Tony Wickham
źródło
źródło
Odpowiedzi:
requestPermission()
można wywołać tylko z an,Activity
a nie aService
(w przeciwieństwie docheckPermission()
tego wymaga tylkoPackageManager
). Musisz więc wykonać dodatkową pracę, aby to obejść; musisz podaćActivity
w swojej aplikacji i na przykładService
sprawdzić, czy uprawnienia, których potrzebuje, a jeśli nie zostały jeszcze nadane, może utworzyć powiadomienie i poinformować użytkownika za pomocą opisowej krótkiej wiadomości, dlaczego powiadomienie i co musi się stać, gdy klikną powiadomienie itp.źródło
Context
który również implementujeOnRequestPermissionsResultCallback
. Funkcjonalność zbliżona do standardowejrequestPermission()
.Zgadzam się, jest to bardzo kłopotliwe dla usług, myślę, że powinieneś zgłosić problem na stronie Android Developer Preview w tym zakresie.
W tej chwili myślę, że najlepszym rozwiązaniem jest sprawdzenie pozwolenia na serwis i wyświetlenie powiadomienia, jeśli brakuje pozwolenia. Co więcej, utwórz DialogActivity, aby poprosić o pozwolenie, gdy użytkownicy naciskają powiadomienie.
źródło
Zajrzyj do biblioteki PermissionEverywhere . Pozwala poprosić o pozwolenie z dowolnego kontekstu.
Tworzy powiadomienie, po kliknięciu którego otwiera działanie z prośbą o pozwolenie.
Przykładowy kod ze strony github biblioteki: -
źródło
PermissionEverywhere
, upewnij się, że deklarujesz aktywność pomocnika w swoim manifeście ORAZ upewnij się, że kiedy ją deklarujesz, jest ona powiązana z odpowiednim pakietem (jeśli używaszPermissionEverywhere
jako oddzielnego pakietu). Zajęło mi dużo czasu, zanim zdałem sobie sprawę, że tak naprawdę nie określałemPermissionEverywhere
pakietu w manifeście.PermissionEverywhere
aplikację demonstracyjną i nie działa.Istnieje bardzo prosta biblioteka, która pozwala to zrobić. Możesz sprawdzić uprawnienia z dowolnego miejsca (nawet z usługi), w zależności od tego, czy aplikacja działa na pierwszym planie, czy w tle, wyświetla normalne okno dialogowe lub generuje powiadomienie z prośbą o uprawnienia. Kod jest naprawdę łatwy do zrozumienia i bardzo łatwy w użyciu.
Spróbuj: uprawnienia Androida
źródło
Możesz użyć,
ResultReceiver
aby utworzyć odbiorcę odpowiedzi użytkowników, a następnie przekazać ją jako oddzwonienie do działania, za pośrednictwem powiadomieńPendingIntent
. Odniesienieźródło