【问题标题】:How to open another app from my android React Native app?如何从我的 android React Native 应用程序打开另一个应用程序?
【发布时间】:2017-01-06 11:35:19
【问题描述】:

我想从我的 React Native 应用程序中打开其他几个应用程序。
链接 (https://facebook.github.io/react-native/docs/linking.html) 非常适合 facebook、google 地图、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。

【问题讨论】:

  • 你找到解决办法了吗?
  • @vinayr 据我所知,在不编写自己的 java 组件的情况下执行此操作的唯一方法是使用此工具制作一个原生反应 - 科尔多瓦桥:link 并仅使用科尔多瓦插件。不幸的是,这对我不起作用,应用程序构建良好,但启动后立即崩溃。祝你好运,如果成功请回复:link.

标签: android react-native react-native-android


【解决方案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);

【讨论】:

  • 好的,但这看起来像是原生 Java 代码,而不是 JavaScript,我不知道如何处理它:/ 我是否需要知道 java 才能使应用程序以原生方式反应?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 2016-12-29
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多