Powiedzmy, że chcę zdefiniować identyfikator URI, taki jak:
myapp://path/to/what/i/want?d=This%20is%20a%20test
muszą być obsługiwane przez moją własną aplikację lub usługę. Zauważ, że schemat jest "myapp"
i nie "http"
, lub "ftp"
. To jest dokładnie to, co zamierzam: zdefiniować własny schemat URI globalnie dla systemu operacyjnego Android. czy to możliwe?
Jest to trochę analogiczne do tego, co niektóre programy już robią w systemach Windows, takich jak Skype ( skype://
) lub dowolny program do pobierania torrentów ( torrent://
).
Odpowiedzi:
To jest bardzo możliwe; definiujesz schemat identyfikatora URI w pliku AndroidManifest.xml, używając
<data>
elementu. Skonfigurujesz filtr intencji z<data>
wypełnionym elementem i będziesz mógł stworzyć własny schemat. ( Więcej na temat filtrów intencji i rozwiązywania intencji tutaj ).Oto krótki przykład:
Jeśli chodzi o sposób działania ukrytych zamiarów, musisz zdefiniować co najmniej jedno działanie i jedną kategorię; tutaj wybrałem VIEW jako akcję (choć może to być cokolwiek) i upewniłem się, że dodałem kategorię DEFAULT (ponieważ jest to wymagane dla wszystkich niejawnych intencji). Zwróć też uwagę, jak dodałem kategorię DO PRZEGLĄDANIA - nie jest to konieczne, ale pozwoli na otwieranie twoich identyfikatorów URI z przeglądarki (sprytna funkcja).
źródło
Uzupełniając odpowiedź @DanielLew , aby uzyskać wartości parametrów należy zrobić tak:
Przykład identyfikatora URI:
myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
w Twojej działalności:
źródło
http://www.host.com/directory/value
? Jak możemy to osiągnąćvalue
?uri.getLastPathSegment();
Zdecydowanie odradzam definiowanie własnego schematu. Jest to sprzeczne ze standardami sieciowymi dotyczącymi schematów URI, które próbują sztywno kontrolować te nazwy z dobrego powodu - aby uniknąć konfliktów nazw między różnymi podmiotami. Kiedy umieścisz łącze do swojego schematu na stronie internetowej, umieścisz tę małą nazwę w całej przestrzeni nazw w Internecie i powinieneś przestrzegać tych standardów.
Jeśli chcesz mieć tylko link do własnej aplikacji, radzę postępować zgodnie z podejściem, które opisałem tutaj:
Jak zarejestrować przestrzeń nazw URL (myapp: //app.start/) w celu uzyskania dostępu do programu przez wywołanie adresu URL w przeglądarce w systemie Android?
źródło
Innym alternatywnym podejściem do Diego jest użycie biblioteki:
https://github.com/airbnb/DeepLinkDispatch
Możesz łatwo zadeklarować identyfikatory URI, które chcesz obsługiwać, i parametry, które chcesz wyodrębnić, za pomocą adnotacji w działaniu, na przykład:
Dodatkowo parametry zapytania zostaną również przekazane do działania.
źródło
Ponieważ pytanie zadawano lata temu, a Android bardzo rozwinął się w tym schemacie URI.
Od oryginalnego schematu URI po precyzyjne linki, a teraz linki do aplikacji na Androida.
Android zaleca teraz używanie adresów URL HTTP, a nie definiowanie własnego schematu URI. Ponieważ linki do aplikacji na Androida używają adresów URL HTTP prowadzących do domeny witryny, której jesteś właścicielem, żadna inna aplikacja nie może ich używać. Porównanie precyzyjnych linków i linków do aplikacji na Androida możesz sprawdzić tutaj
Teraz możesz łatwo dodać schemat URI, korzystając z opcji Android Studio: Narzędzia> Asystent łączy aplikacji. Proszę zapoznać się ze szczegółami w dokumencie dotyczącym Androida: https://developer.android.com/studio/write/app-link-indexing.html
źródło