Как открыть другое приложение из моего приложения Android React Native?

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

Мой бывший член команды год назад создает другое приложение с помощью cordova, и он использует этот инструмент: 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 наплевать.


person Tomasz Nowak    schedule 06.01.2017    source источник
comment
Вы нашли какое-нибудь решение?   -  person vinayr    schedule 24.01.2017
comment
@vinayr, насколько мне известно, единственный способ сделать это без написания собственного Java-компонента - это создать собственный мост React - Cordova Bridge с помощью этого инструмента: ссылка и просто используйте плагины Cordova. К сожалению, у меня это не работает, приложение работает хорошо, но сразу после запуска вылетает. Удачи, и, если у вас все получится, ответьте здесь: ссылка.   -  person Tomasz Nowak    schedule 24.01.2017


Ответы (1)


Я не знаю, можно ли получить 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);
person Ravi Sisodia    schedule 06.01.2017
comment
Хорошо, но это похоже на собственный код Java, а не на JavaScript, и я не знаю, что с этим делать: / Нужно ли мне знать Java, чтобы приложения реагировали на нативные? - person Tomasz Nowak; 07.01.2017