Kann mir jemand eine Anleitung geben, wie ich meine Anwendung Android über den Browser Android starten kann?
Verwenden Sie ein <intent-filter>
mit einem <data>
-Element. Um beispielsweise alle Links zu Twitter.com zu bearbeiten, fügen Sie dies in Ihren _<activity>
_ in Ihren _AndroidManifest.xml
_ ein:
_<intent-filter>
<data Android:scheme="http" Android:Host="Twitter.com"/>
<action Android:name="Android.intent.action.VIEW" />
</intent-filter>
_
Wenn der Benutzer dann im Browser auf einen Link zu Twitter klickt, wird er gefragt, welche Anwendung er verwenden soll, um die Aktion abzuschließen: den Browser oder Ihre Anwendung.
Wenn Sie eine enge Integration zwischen Ihrer Website und Ihrer App sicherstellen möchten, können Sie natürlich Ihr eigenes Schema definieren:
_<intent-filter>
<data Android:scheme="my.special.scheme" />
<action Android:name="Android.intent.action.VIEW" />
</intent-filter>
_
Dann können Sie in Ihre Web-App Links einfügen wie:
_<a href="my.special.scheme://other/parameters/here">
_
Und wenn der Benutzer darauf klickt, wird Ihre App automatisch gestartet (da es wahrscheinlich die einzige ist, die mit _my.special.scheme://
_ uris-Typen umgehen kann). Der einzige Nachteil dabei ist, dass der Benutzer einen bösen Fehler erhält, wenn er die App nicht installiert hat. Und ich bin nicht sicher, ob es eine Möglichkeit gibt, das zu überprüfen.
Bearbeiten: Um Ihre Frage zu beantworten, können Sie getIntent().getData()
verwenden, das ein Uri
-Objekt zurückgibt. Anschließend können Sie mit den Methoden _Uri.*
_ die benötigten Daten extrahieren. Angenommen, der Benutzer hat auf einen Link zu _http://Twitter.com/status/1234
_ geklickt:
_Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String Host = data.getHost(); // "Twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
_
Sie können dies überall in Ihrem Activity
tun, aber Sie werden es wahrscheinlich in onCreate()
tun wollen. Sie können auch params.size()
verwenden, um die Anzahl der Pfadsegmente in Uri
abzurufen. Weitere Uri
-Methoden, mit denen Sie bestimmte Teile extrahieren können, finden Sie in javadoc oder auf der Entwickler-Website Android.
Alle obigen Antworten haben bei mir mit CHROME
zum 28. Januar 2014 nicht funktioniert
meine App wurde ordnungsgemäß über http://example.com/someresource/ Links von Apps wie Hangouts, Google Mail usw. gestartet, jedoch nicht über den Browser chrome.
um dieses Problem zu lösen, damit es ordnungsgemäß von CHROME aus gestartet wird, müssen Sie den Intent-Filter wie folgt einstellen
<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:Host="example.com"
Android:pathPrefix="/someresource/"
Android:scheme="http" />
<data
Android:Host="www.example.com"
Android:pathPrefix="/someresource/"
Android:scheme="http" />
</intent-filter>
beachten Sie das pathPrefix
-Element
ihre App wird nun in der Aktivitätsauswahl angezeigt, wenn der Benutzer ein http://example.com/someresource/ Muster vom chrome Browser anfordert, indem er auf einen Link aus den Google-Suchergebnissen oder einer anderen Website klickt
Bitte beachten Sie meinen Kommentar hier: Link im Browser Android erstellen, um meine App zu starten?
Wir raten Menschen dringend davon ab, ihre eigenen Systeme zu verwenden, es sei denn, sie definieren ein neues weltweites Internet-System.
In meinem Fall musste ich zwei Kategorien für den <intent-filter>
festlegen und dann funktionierte es:
<intent-filter>
<data Android:scheme="my.special.scheme" />
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT"/>
<category Android:name="Android.intent.category.BROWSABLE"/>
</intent-filter>
Zum Beispiel haben Sie folgende Dinge:
Ein Link zum Öffnen Ihrer App: http://example.com
Der Paketname Ihrer App: com.example.mypackage
Dann müssen Sie als nächstes tun:
1) Fügen Sie Ihrer Aktivität einen Absichtsfilter hinzu (Dies kann jede gewünschte Aktivität sein. Weitere Informationen finden Sie in der Dokumentation ).
<activity
Android:name=".MainActivity">
<intent-filter Android:label="@string/filter_title_view_app_from_web">
<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://example.com" -->
<data
Android:Host="example.com"
Android:scheme="http" />
</intent-filter>
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Erstellen Sie eine HTML-Datei, um den Link zu testen, oder verwenden Sie diese Methode
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Verwenden Sie Mobile Chrome zum Testen
4) Das war's.
Und es ist nicht notwendig, App im Markt zu veröffentlichen, um Deep-Linking zu testen =)
Weitere Informationen finden Sie unter Dokumentation und nützlich Präsentation .
Es sollte auch <category Android:name="Android.intent.category.BROWSABLE"/>
zum Intent-Filter hinzugefügt werden, damit die Aktivität über den Link richtig erkannt wird.
Über den folgenden Link erhalten Sie Informationen zum Starten der App (falls installiert) direkt über den Browser. Andernfalls wird die App direkt im Play Store geöffnet, sodass der Benutzer sie nahtlos herunterladen kann.
Beachten Sie, dass Sie den Intent-Filter aufteilen müssen, wenn Ihr Symbol beim Implementieren dieser Funktion aus dem Launcher von Android verschwindet.
<activity
Android:name=".MainActivity"
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>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:scheme="your-own-uri" />
</intent-filter>
</activity>
Ja, Chrome sucht, anstatt nach Schema zu suchen. Wenn Sie Ihre App über das URI-Schema starten möchten, verwenden Sie dieses coole Dienstprogramm im Play Store. Es hat meinen Tag gerettet :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Xamarin Portierung der Antwort von Felix
Fügen Sie in Ihrem MainActivity
Folgendes hinzu ( docs: Android.App.IntentFilterAttribute Class):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin fügt im AndroidManifest.xml
Folgendes für Sie hinzu:
<activity Android:label="Something" Android:screenOrientation="portrait" Android:theme="@style/MyTheme" Android:name="blahblahblah.MainActivity">
<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="my.special.scheme" />
</intent-filter>
</activity>
Und um params ( zu erhalten, habe ich in OnCreate von MainActivity getestet:
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var Host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
Soweit ich weiß, kann oben in jeder Aktivität hinzugefügt werden, nicht nur in MainActivity
Anmerkungen:
OnCreate
Event der App MainLauncher Activity
wird erneut ausgelöst.<a href="my.special.scheme://Host/arg1/arg2">
, in den obigen letzten Code-Snippet-Werten ist:scheme: my.special.scheme
Host: Host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Felix 'Ansatz zum Umgang mit Deep Links ist der typische Ansatz zum Umgang mit Deep Links. Ich würde auch vorschlagen, diese Bibliothek zu überprüfen, um das Routing und Parsen Ihrer Deep Links zu handhaben:
https://github.com/airbnb/DeepLinkDispatch
Sie können Anmerkungen verwenden, um Ihre Aktivität für eine bestimmte Deep-Link-URI zu registrieren, und sie extrahiert die Parameter für Sie, ohne die üblichen Schritte zum Abrufen der Pfadsegmente, zum Abgleichen usw. ausführen zu müssen. Sie können einfach Anmerkungen und Aktivitäten wie diese erstellen :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Hey, ich habe die Lösung. Ich habe die Kategorie nicht als "Standard" festgelegt. Außerdem habe ich die Hauptaktivität für die Absichtsdaten verwendet. Jetzt benutze ich eine andere Aktivität für die Intent-Daten. Danke für die Hilfe. :)
Sie müssen der CALLBACK_URL 'app: //' einen Pseudo-Hostnamen hinzufügen, der als URL keinen Sinn ergibt und nicht analysiert werden kann.
example.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
Schau @JRuns Antwort in hier . Die Idee ist, HTML mit Ihrem benutzerdefinierten Schema zu erstellen und es irgendwo hochzuladen. Wenn Sie dann auf Ihren benutzerdefinierten Link in Ihrer HTML-Datei klicken, werden Sie zu Ihrer App weitergeleitet. Ich habe this article für Android verwendet. Vergessen Sie jedoch nicht, der Zielaktivität den vollständigen Namen Name = "MyApp.Mobile.Droid.MainActivity"
zuzuweisen.
Stand 15/06/2019
was ich getan habe, ist alle vier Möglichkeiten zum Öffnen der URL einzuschließen.
mit http
/https
und 2 mit www
im Präfix und 2 ohne www
und wenn ich dies benutze, wird meine App jetzt automatisch gestartet, ohne dass ich einen Browser und eine andere Option auswählen muss.
<intent-filter Android:autoVerify="true">
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:scheme="https" Android:Host="example.in" />
<data Android:scheme="https" Android:Host="www.example.in" />
<data Android:scheme="http" Android:Host="example.in" />
<data Android:scheme="http" Android:Host="www.example.in" />
</intent-filter>