2017-01-06 6 views
0

Ich möchte mehrere andere Anwendungen von meiner React Native App öffnen. Linking (https://facebook.github.io/react-native/docs/linking.html) funktioniert gut für Apps wie Facebook, Google Maps, Tel, Skype , wenn ich ihre Absicht URLs kenne, aber was ich ausführen möchte, ist Standard Ebook Reader, Youtube, IPLA und eine Reihe von Spielen auf dem Tablet vorinstalliert, welche URLs/Paketnamen Ich weiß es nicht.Wie öffne ich eine andere App von meiner android React Native App?

Mein Team Ex-Mitglied Jahr erstellt andere App mit Cordova und er verwendet dieses Tool: https://github.com/lampaa/com.lampa.startapp.

Fragen:
- ob es irgendein Tool wie lampaa startapp oben, aber für Native Reaktion, wo kann ich App mit einem Paketnamen laufen, URL nicht?
- Wie kann ich die Intent-URL (wie 'fb:' für Facebook, 'geo:' für g.maps) und Paketnamen (wie 'com.google.android.apps.maps') von installierten Apps prüfen?
- Wie installiere ich installierte Spiele und eBook Reader, wenn ich bereits ihren Paketnamen, aber keine URL habe?

Android nur, nicht über iOS.

+0

Sie eine Lösung gefunden? – vinayr

+0

@vinayr nach meinem Wissen die einzige Möglichkeit, dies zu tun, ohne eigene Java-Komponente zu schreiben, ist eine native - Cordova Brücke mit diesem Werkzeug zu reagieren: [link] (https://github.com/axemclion/react-native-cordova -plugin) und verwende nur Cordova-Plugins. Leider funktioniert das nicht für mich, App baut sich gut auf, stürzt aber sofort nach dem Start ab. Viel Glück und bitte antworten Sie dort, wenn Sie Erfolg haben: [link] (https://github.com/axemclion/react-native-cordova-plugin/issues/36). –

Antwort

0

ich weiß nicht, ob es möglich ist, deep-link scheme (wie fb:, geo:) von anderen installierten Anwendungen zu erhalten.

Aber Sie können Launcher activity von anderen installierten Anwendungen erhalten.

PackageManager pm = getPackageManager(); 

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

List<ResolveInfo> appList = pm.queryIntentActivities(mainIntent, 0); 
    Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm)); 

for (ResolveInfo rInfo : appList) { 
    Log.d("Launcher", "package:" + rInfo.activityInfo.packageName + 
         "; activity: " + rInfo.activityInfo.name); 
} 

Oder Sie können direkt eine andere App starten:

PackageManager pm = getPackageManager(); 
Intent intent = pm.getLaunchIntentForPackage(pacakgeNameOfTheApp); 
startActivity(intent); 
+1

Ok, aber das sieht wie ein nativer Java-Code aus, kein JavaScript, und ich weiß nicht, was ich damit machen soll:/Muss ich Java kennen, um Apps nativ reagieren zu lassen? –

Verwandte Themen