Frage

Sagen Sie, ich möchte definieren, dass ein URI wie:

myapp://path/to/what/i/want?d=This%20is%20a%20test

muss von meiner eigenen Bewerbung oder meinem eigenen Dienst behandelt werden. Beachten Sie, dass das Schema ist "myapp" und nicht "http", oder "ftp". Genau das beabsichtige ich: mein eigenes URI -Schema weltweit für das Android -Betriebssystem zu definieren. Ist das möglich?

Dies ist etwas analog zu dem, was einige Programme bereits auf, z. B. Windows -Systemen wie Skype (Skype (skype://) oder ein Torrent -Downloader -Programm (torrent://).

War es hilfreich?

Lösung

Dies ist sehr möglich; Sie definieren das URI -Schema in Ihrem AndroidManifest.xml mit der <data> Element. Sie richten einen Absichtsfilter mit dem ein <data> Element ausgefüllt, und Sie können Ihr eigenes Schema erstellen. (Mehr zu Absichtsfiltern und Absichtserklärung hier.)

Hier ist ein kurzes Beispiel:

<activity android:name=".MyUriActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" android:host="path" />
    </intent-filter>
</activity>

Nach der Funktionsweise der impliziten Absichten müssen Sie mindestens eine Aktion und eine Kategorie definieren. Hier habe ich die Ansicht als Aktion ausgewählt (obwohl es irgendetwas sein könnte), und stellte sicher, dass die Standardkategorie hinzugefügt wird (da dies für alle impliziten Absichten erforderlich ist). Beachten Sie auch, wie ich die Kategorie hinzugefügt habe - dies ist nicht erforderlich, aber es ermöglicht es, dass Ihre URIs vom Browser (eine raffinierte Funktion) zu öffnenbar ist.

Andere Tipps

Ergänzen die @Daniellew Antwort, um die Werte der Parameteres zu erhalten, müssen Sie dies tun:

URI -Beispiel: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

in Ihrer Aktivität:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

Ich empfehle dringend, dass Sie Ihr eigenes Schema nicht definieren. Dies verstößt gegen die Webstandards für URI -Programme, die versucht, diese Namen aus gutem Grund streng zu kontrollieren - um Namenskonflikte zwischen verschiedenen Unternehmen zu vermeiden. Sobald Sie einen Link zu Ihrem Schema auf einer Website gestellt haben, haben Sie diesen kleinen Namen den gesamten Internet -Namespace in den gesamten Internet eingelegt und sollten diesen Standards folgen.

Wenn Sie nur einen Link zu Ihrer eigenen App haben möchten, empfehle ich Ihnen, dem hier beschriebenen Ansatz zu folgen:

Wie registriere ich einen URL -Namespace (MyApp: //app.start/) für den Zugriff auf Ihr Programm, indem Sie eine URL im Browser im Android -Betriebssystem aufrufen?

Ein weiterer alternativer Ansatz für Diego ist die Verwendung einer Bibliothek:

https://github.com/airbnb/deeplinkdispatch

Sie können die URIs, die Sie verarbeiten möchten, und die Parameter, die Sie möchten, durch Anmerkungen zur Aktivität leicht deklarieren, wie:

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

Als Plus werden auch die Abfrageparameter an die Aktivität weitergegeben.

Wie die Frage vor Jahren gestellt wird und Android in diesem URI -Schema viel weiterentwickelt wird.
Von Original URI -Schema bis hin zu Deep Link und jetzt Android App -Links.

Android empfiehlt nun, HTTP -URLs zu verwenden und Ihr eigenes URI -Schema nicht zu definieren. Da Android -App -Links HTTP -URLs verwenden, die zu einer von Ihnen besitzen Website -Domain verlinken, kann keine andere App Ihre Links verwenden. Sie können den Vergleich von Deep -Link- und Android -App -Links von überprüfen hier

Jetzt können Sie einfach ein URI -Schema mithilfe der Android Studio -Option hinzufügen: Tools> App -Links -Assistent. Bitte beachten Sie das Detail in Android -Dokument: https://developer.android.com/studio/write/app-link-indexing.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top