2017-01-06 2 views
0

Я хочу открыть несколько других приложений из моего приложения React Native.
Linking (https://facebook.github.io/react-native/docs/linking.html) отлично подходит для таких приложений, как facebook, google maps, tel, skype , когда я знаю их намерения urls, но то, что я хочу запустить, - это программа чтения электронных книг по умолчанию, youtube, IPLA и множество предустановленных на планшете игр, который URL/имена пакетов Я не знаю.Как открыть другое приложение из моего приложения Android Android React?

Моя команда, экс-член год назад, создает другое приложение с кордорой, и он использует этот инструмент: https://github.com/lampaa/com.lampa.startapp.

Вопросы:
- есть ли какой-то инструмент, как lampaa StartApp выше, но для React Native, где я могу запустить приложение с именем пакета, а не URL?
- как я могу проверить URL-адрес намерения (например, «fb:» для facebook, «geo:» для g.maps) и имена пакетов (например, «com.google.android.apps.maps») установленных приложений?
- как запустить установленные игры и электронную книгу, когда у меня уже есть имя своего пакета, но не URL?

Android только, не заботясь о iOS.

+0

ли вы найти какое-либо решение? – vinayr

+0

@vinayr, согласно моим знаниям, единственный способ сделать это без написания собственного компонента java - это сделать отредактированный коренной мост с помощью этого инструмента: [link] (https://github.com/axemclion/react-native-cordova -plugin) и просто используйте плагины cordova. К сожалению, это не работает для меня, приложение хорошо работает, но с самого начала происходит сбой. Удачи и ответьте, если вы добьетесь успеха: [link] (https://github.com/axemclion/react-native-cordova-plugin/issues/36). –

ответ

0

Невозможно получить deep-link scheme (например, fb:, geo:) других установленных приложений.

Но вы можете получить Launcher activity других установленных приложений.

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); 
} 

Или вы можете сразу запустить другое приложение:

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

Хорошо, но это похоже на собственный Java-код, а не на JavaScript, и я не знаю, что с этим делать:/Нужно ли мне знать java, чтобы приложения зависели от родных? –