când un link făcut clic sau o cerere programatică invocă o intenție URI web, sistemul Android încearcă fiecare dintre următoarele acțiuni, în ordine secvențială, până când cererea reușește:
- deschideți aplicația preferată a utilizatorului care poate gestiona URI-ul, dacă unul este desemnat.
- deschideți singura aplicație disponibilă care poate gestiona URI-ul.
- permite utilizatorului să selecteze o aplicație dintr-un dialog.
urmați pașii de mai jos pentru a crea și testa linkuri către conținutul dvs. De asemenea, puteți utiliza Asistentul de linkuri pentru aplicații din Android Studio pentru a adăuga linkuri pentru aplicații Android.
Adăugați filtre de intenție pentru linkurile primite
pentru a crea un link către conținutul aplicației, Adăugați un filtru de intenție care conține aceste elemente și valorile atributelor în manifest:
<action>
specificați acțiunea de intențieACTION_VIEW
, astfel încât filtrul de intenție să poată fi accesat din Căutarea Google.<data>
adăugați una sau mai multe etichete<data>
, fiecare dintre acestea reprezentând un format URI care se rezolvă la activitate. Cel puțin, eticheta<data>
trebuie să includă atributulandroid:scheme
.
puteți adăuga mai multe atribute pentru a rafina în continuare tipul de URI acceptat de activitate. De exemplu, este posibil să aveți mai multe activități care acceptă uri similare, dar care diferă pur și simplu în funcție de numele căii. În acest caz, utilizați atributul android:path
sau variantele sale pathPattern
sau pathPrefix
pentru a diferenția ce activitate ar trebui să deschidă sistemul pentru diferite căi URI.
<category>
Include categoriaBROWSABLE
. Este necesar pentru ca filtrul de intenție să fie accesibil de la un webbrowser. Fără aceasta, făcând clic pe un link dintr-un browser nu se poate rezolva în aplicația dvs.
include și categoria DEFAULT
.Acest lucru permite aplicației să răspundă la intențiile implicite. Fără aceasta, activitatea poate fi pornitănumai dacă intenția specifică numele componentei aplicației.
următorul fragment XML arată cum puteți specifica un filtru de intenție în manifestul dvs. pentru legături profunde. Uri "example://gizmos"
și"http://www.example.com/gizmos"
ambele rezolvă această activitate.
<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_view_http_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://www.example.com/gizmos" --> <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/gizmos" /> <!-- note that the leading "/" is required for pathPrefix--> </intent-filter> <intent-filter android:label="@string/filter_view_example_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos" --> <data android:scheme="example" android:host="gizmos" /> </intent-filter></activity>
observați că cele două filtre de intenție diferă numai de elementul <data>
.Deși este posibil să includeți mai multe elemente <data>
în același filtru,este important să creați filtre separate atunci când intenția dvs. este de a declara bucle unice (cum ar fi o combinație specifică de scheme
și host
), deoarece mai multe elemente <data>
din același filtru de intenție sunt de fapt îmbinate împreună pentru a ține cont de toate variațiile atributelor lor combinate. De exemplu, luați în considerare următoarele:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>
s-ar putea părea ca și cum acest lucru acceptă numai https://www.example.com
șiapp://open.my.app
. Cu toate acestea, susține de fapt aceste două, plus acestea:app://www.example.com
și https://open.my.app
.
după ce ați adăugat filtre de intenție cu uri pentru conținutul activității la appmanifest, Android este capabil să direcționeze orice Intent
care are uri potrivite pentru aplicația dvs. în timpul rulării.
pentru a afla mai multe despre definirea filtrelor de intenție, consultați permiteți altor aplicații să vă înceapă activitatea.
Citiți datele din intențiile primite
odată ce sistemul vă începe activitatea printr-un filtru de intenții, puteți utiliza datele furnizate de Intent
pentru a determina ce trebuie să randați. Apelați metodele getData()
șigetAction()
pentru a prelua datele și acțiunea asociată cu intrarea Intent
. Puteți apela aceste metode în orice moment pe parcursul ciclului de viață al activității, dar, în general, ar trebui să faceți acest lucru în timpul apelurilor timpurii, cum ar fi onCreate()
sauonStart()
.
Iată un fragment care arată cum să preluați date dintr-unIntent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}
Java
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();}
urmați aceste bune practici pentru a îmbunătăți experiența utilizatorului:
- legătura profundă ar trebui să ducă utilizatorii direct la conținut,fără solicitări, pagini interstițiale sau Conectări. Asigurați-vă că utilizatorii potvedeți conținutul aplicației chiar dacă nu au deschis niciodată aplicația.Este în regulă să solicitați utilizatorilor interacțiuni ulterioare sau când deschid aplicația de la lansator.
- Urmați instrucțiunile de proiectare descrise în navigare cu spatele și în sus, astfel încât aplicația dvs. să corespundă așteptărilor utilizatorilor cu privire la navigarea înapoi după ce intră în aplicație printr-un link profund.
testați legăturile profunde
puteți utiliza DebugBridge-ul Android cu instrumentul Manager de activități (am) pentru a testa dacă intenția filterURIs pe care ați specificat-o pentru conectarea profundă rezolvă activitatea corectă a aplicației. Youpoate rula comanda adb împotriva unui dispozitiv sau a unui emulator.
sintaxa generală pentru testarea unui URI Filtru de intenție cu adb este:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
de exemplu, comanda de mai jos încearcă să vizualizeze o activitate țintă a aplicației careeste asociat cu URI-ul specificat.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
declarația manifest și manualul de intenție pe care l-ați setat mai sus definesc conexiunea dintre aplicația dvs. și un site web și ce trebuie să faceți cu linkurile primite. Cu toate acestea, pentru ca sistemul să trateze aplicația dvs. ca handler implicit pentru un set de URI-uri, trebuie să solicitați, de asemenea, ca sistemul să verifice această conexiune. Următoarea lecție explică modul de implementare a acestei verificări.