2016-07-12 16 views
2

Zum Beispiel gibt es ein uri Beispiel: // activityone foo = bar, die eine Anwendung öffnen kann und von diesem adb Befehl einen der Aktivität startenWie öffne ich ein Deep Linking in Android?

adb shell am start -W -a android.intent.action.VIEW -d "example://activityone?foo=bar" com.example.deeplinking 

Gibt es noch andere Möglichkeiten, um zu starten? die Android App durch diese URI (Beispiel: // activityone? foo = bar)? Wie kann ich dieses uri in eine E-Mail schreiben, und wenn es angeklickt wird, wird es die App starten?

+0

'' link

+0

Dies funktioniert nicht, wenn in E-Mail –

+0

Für E-Mail-Kompatibilität eingebettet sind, verwenden echte Deeplink oder Chrom Absichten: https://developer.chrome.com/multidevice/android/intents –

Antwort

1

Nicht standardmäßige URL-Schemata (was example:// ist) werden nicht immer als Links behandelt. Ihre beste Option ist es, diese URL in einen Link zu verpacken, den die App erkennen kann (http:// oder https://), und dann darauf zu achten, Ihre App später zu öffnen, normalerweise über eine Art automatischer Weiterleitung. So behandeln wir die Dinge, um sicherzustellen, dass die App immer gestartet wird, unabhängig davon, wo die Verknüpfung geöffnet ist.

5

Zuerst sollten Sie die Dokumentation hierzu lesen: Intents and Intent Filters. Insbesondere der Abschnitt "Empfangen einer impliziten Absicht".

Wie andere festgestellt haben, hat die Verwendung eines benutzerdefinierten Schemas Probleme.

  • Sie sind nicht immer so behandelt, als Links
  • Sie besitzen sie nicht, wie Sie einen Domain-Namen (Host) besitzen.

So sollen Sie eine Aktivität in ihrem Manifest mit einem Intent-Filter für Ihren Host und verwenden ein echtes Schema definieren. In den Abschnitten "Aktionstest", "Kategorietest" und "Datentest" der Dokumentation Intent & Intent Filters finden Sie Informationen zur Konfiguration für Ihren speziellen Anwendungsfall.

<activity android:name="com.example.app.ActivityOne"> 
    <intent-filter> 
     <data android:scheme="http"/> 
     <data android:host="example.com"/> 
     <data android:path="/activityone"/> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
    </intent-filter> 
</activity> 

Dann können Sie einen Link wie den folgenden verwenden.

http://example.com/activityone?foo=bar 

Da dies ein http-Link wird das System den Benutzer auffordern, zu wählen, welche App sie öffnen mit (Ihre Anwendung oder ihren bevorzugten Browser). Wenn sie Ihre App auswählen, startet sie ActivityOne, die die Abfragedaten so erhalten kann.

public class ActivityOne extends Activity { 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Intent intent = getIntent(); 
     Uri uri = intent.getData(); 
     String foo = uri.getQueryParameter("foo"); 
    } 

} 

Wenn Sie ein benutzerdefiniertes Schema in den Intent-Filter verwenden, dann werden Sie (wahrscheinlich) die einzige Anwendung registrierte diese Absicht zu handhaben und der Benutzer wird nicht Ihre Anwendung auswählen müssen. Es wird Ihnen jedoch viel schwerer fallen, eine Verknüpfung mit einem benutzerdefinierten Schema in eine E-Mail aufzunehmen. Die meisten E-Mail-Clients erkennen nichts mit einem benutzerdefinierten Schema als Link und können nicht angeklickt werden.

+0

Wie kann ich dieses uri in eine E-Mail schreiben, und wenn es geklickt wird, wird es die App starten? –

+0

Ich habe meine Antwort aktualisiert, um nur den Link und weitere Informationen zum App-Auswahl-/Startprozess zu enthalten, wenn darauf geklickt wird. Sie können es in einer E-Mail an Sie senden, um es zu testen. – mpkuth

+0

Wenn Sie Gmail (und vielleicht andere E-Mail-Clients) verwenden, müssen Sie explizit sagen, dass Sie http://example.com/activityone möchten.foo = bar' soll als Link und nicht als einfacher Text behandelt werden. Markieren Sie den Text und klicken Sie auf "Link einfügen" in der Symbolleiste nach unten mit der Schaltfläche "Senden". – mpkuth