Ist es möglich, einen Link zu erstellen wie:
<a href="anton://useful_info_for_anton_app">click me!</a>
meine Anton App starten lassen?
Ich weiß, dass dies für die Android Market-App mit dem Marktprotokoll funktioniert, aber kann etwas Ähnliches mit anderen Apps gemacht werden?
Hier ist ein Beispiel für einen Link, mit dem der Android Market gestartet wird:
<a href="market://search?q=pname:com.nytimes.android">click me!</a>
Update:
Die Antwort, die ich von eldarerathis akzeptiert habe, funktioniert hervorragend, aber ich möchte nur erwähnen, dass ich Probleme mit der Reihenfolge der Unterelemente des <intent-filter>
Tags hatte. Ich schlage vor, Sie <intent-filter>
erstellen einfach ein anderes mit den neuen Unterelementen in diesem Tag, um die Probleme zu vermeiden, die ich hatte. Zum Beispiel AndroidManifest.xml
sieht mein so aus:
<activity android:name=".AntonWorld"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="anton" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Antworten:
Ich denke, Sie möchten sich das
<intent-filter>
Element Ihrer Mainfest-Datei ansehen . Schauen Sie sich insbesondere die Dokumentation für das<data>
Unterelement an.Grundsätzlich müssen Sie Ihr eigenes Schema definieren. Etwas in der Art von:
Dann sollten Sie in der Lage sein, Ihre App mit Links zu starten, die mit dem
anton:
URI-Schema beginnen.quelle
Bitte verwenden Sie NICHT Ihr eigenes benutzerdefiniertes Schema !!! URI-Schemata sind ein globaler Netzwerk- Namespace. Besitzen Sie das "anton:" - Programm weltweit? Nein? Dann benutze es NICHT.
Eine Möglichkeit besteht darin, eine Website und einen Absichtsfilter für einen bestimmten URI auf dieser Website zu haben. Dies ist beispielsweise das, was Market tut, um URIs auf seiner Website abzufangen:
Alternativ gibt es das Schema "Absicht:". Auf diese Weise können Sie nahezu jede Absicht als URI beschreiben, die der Browser beim Klicken zu starten versucht. Um ein solches Schema zu erstellen, schreiben Sie am besten einfach den Code, um die Absicht zu erstellen, die Sie starten möchten, und drucken Sie dann das Ergebnis von intent.toUri (Intent.URI_INTENT_SCHEME).
Sie können eine Aktion mit dieser Absicht verwenden, um Aktivitäten zu finden, die diese Aktion unterstützen. Der Browser fügt der Absicht aus Sicherheitsgründen automatisch die Kategorie BROWSABLE hinzu, bevor er sie startet. Aus dem gleichen Grund werden auch alle expliziten Komponenten entfernt, die Sie angegeben haben.
Der beste Weg, dies zu verwenden, wenn Sie sicherstellen möchten, dass nur Ihre App gestartet wird, ist mit Ihrer eigenen Aktion und mit Intent.setPackage (), dass der Intent nur mit Ihrem App-Paket übereinstimmt.
Kompromisse zwischen den beiden:
Für http-URIs benötigen Sie eine Domain, die Sie besitzen. Der Benutzer hat immer die Möglichkeit, den URI im Browser anzuzeigen. Es hat sehr schöne Fallback-Eigenschaften, bei denen Ihre App einfach auf Ihrer Website landet, wenn sie nicht installiert ist.
Vorsatz-URIs erfordern, dass Ihre App bereits installiert ist und nur auf Android-Handys. Die erlauben fast jede Absicht (haben aber immer die BROWSABLE-Kategorie enthalten und unterstützen keine expliziten Komponenten). Mit ihnen können Sie den Start nur auf Ihre App lenken, ohne dass der Benutzer die Möglichkeit hat, stattdessen zum Browser oder einer anderen App zu wechseln.
quelle
market://
Links :)Ich entschuldige mich für die Werbung für mich selbst, habe aber ein jQuery-Plugin zum Starten nativer Apps über Weblinks https://github.com/eusonlito/jquery.applink
Sie können es einfach verwenden:
quelle
Ich habe mich auch diesem Problem gestellt und sehe viele absurde Seiten. Ich habe gelernt, dass Sie die Reihenfolge der XML-Elemente ändern müssen, um Ihre App durchsuchbar zu machen.
Das hat bei mir funktioniert und könnte Ihnen helfen.
quelle
Hier ist mein Rezept:
Erstellen Sie einen statischen HTML-Code, der zu Ihrer angeforderten App-URL umleitet, und stellen Sie diese Seite ins Web.
Auf diese Weise sind die von Ihnen freigegebenen Links für Android "echte" Links (sie können angeklickt werden).
Sie "teilen" einen regulären HTTP-Link, www.your.server.com/foo/bar.html Diese URL gibt einen einfachen 8-zeiligen HTML-Code zurück, der zum URI Ihrer App umleitet (window.location = "blah: // kuku") ( Beachten Sie, dass 'blah' nicht mehr HTTP oder HTTPS sein muss.
Sobald Sie dies eingerichtet haben, können Sie den HTML-Code mit allen ausgefallenen Funktionen erweitern, wie oben vorgeschlagen.
Dies funktioniert mit dem integrierten Browser, Opera und Firefox (haben keinen anderen Browser getestet). Firefox fragt 'Dieser Link muss mit einer Anwendung geöffnet werden' (ok, abbrechen). Andere Browser sorgen sich anscheinend nicht so sehr um die Sicherheit, sie öffnen einfach die App, ohne Fragen zu stellen.
quelle
<a href="iamnearby://register_activate">Activate</a>
Sobald Sie die Absicht und das benutzerdefinierte URL-Schema für Ihre App eingerichtet haben, hat dieser Javascript-Code oben auf einer Empfangsseite sowohl für iOS als auch für Android für mich funktioniert:
Dies wurde nur im Android-Browser getestet. Ich bin mir bei Firefox oder Opera nicht sicher. Der Schlüssel ist, dass der Android-Browser zwar keine nette Ausnahme für Sie auslöst
window.open(custom_url, '_blank')
, aber fehlschlägt und zurückkehrt,null
was Sie später testen können.Update: Verwenden Sie
store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";
diese Option, um auf Android auf Google Play zu verlinken.quelle
Möglicherweise möchten Sie eine Bibliothek in Betracht ziehen, um den Deep Link zu Ihrer App zu verwalten:
https://github.com/airbnb/DeepLinkDispatch
Sie können den Absichtsfilter zu einer kommentierten Aktivität hinzufügen, wie oben vorgeschlagen. Es übernimmt das Routing und Parsen von Parametern für alle Ihre Deep Links. Ihre MainActivity könnte beispielsweise Folgendes haben:
Es kann auch Abfrageparameter verarbeiten.
quelle
Versuchen Sie meinen einfachen Trick:
und mein HTML-Link:
oder Sie können machen <a href = "classRegister: wahr "> < ! - "true" Wert für die Klasse Dateinamen
Dieses Skript funktioniert jedoch für mailto link :)
quelle
JavascriptInterface
mit der Problemumgehung. Dies ist die richtige Problemumgehung, wenn Sie 2.3 unterstützen müssen, bei dem JavascriptInterface fehlerhaft ist.Diese Methode ruft nicht den Disambiguierungsdialog auf, in dem Sie aufgefordert werden, entweder Ihre App oder einen Browser zu öffnen.
Wenn Sie Folgendes in Ihrem Manifest registrieren
und klicken Sie beispielsweise in einer E-Mail auf Ihrem Telefon auf diese URL
Dann wird Android versuchen, eine App mit dem Paket com.myApp zu finden , die auf Ihre Galerie- Absicht reagiert und ein myApp- Schema hat. Falls dies nicht möglich ist, werden Sie zum Store gebracht und suchen nach com.myApp , die Ihre App sein sollte.
quelle