问题描述
我正在为 React Native 应用程序开发相机,它需要包含一个按钮来打开设备库应用程序(Android 库,iOS 相机胶卷)。所有照片都存储在特定相册中,因此如果可能,最好在该相册中打开应用程序,但这不是强制性的。值得注意的是,我不想创建自定义的应用内图库。这实际上会更容易,但这不是客户要求的。
这似乎是一个非常简单的任务,但我还没有找到一种方法来做到这一点。有些人建议使用链接,如下所示:
Linking.openURL('content://media/internal/images/media');
这会让操作系统询问用户应该使用什么应用程序来打开该链接。如果我选择 Google 相册,它工作正常。但是,如果我使用默认的 android 画廊,它会打开一张不存在的照片,显示一个占位符图像。所以这种方法不可靠。
根据 android 文档,应该可以使用意图打开图库应用程序。但我尝试同时做:
Linking.sendIntent('CATEGORY_APP_galLERY');
Linking.sendIntent('android.intent.category.APP_galLERY');
它没有用。要么我做错了什么,要么 sendIntent 根本不起作用。
还有一个名为“react-native-send-intent”的插件,但它不包含打开图库的功能。我的想法快用完了,任何帮助都会得到认可。
解决方法
我在我的个人项目中遇到了同样的问题。
根据 the doc,CATEGORY_APP_GALLERY
只是指定应用类别,必须与 ACTION_MAIN
操作一起使用。
据我所知,不幸的是,我们无法通过 React Native 内置的 Linking.sendIntent()
方法传递类别。在这方面,我们必须依赖第三方库。
我选择了 expo-intent-launcher
(如果您不使用 expo,您仍然可以按照 the doc 中描述的裸露工作流程使用它)。
这是一个带有 expo-intent-launcher
的工作片段示例:
import * as IntentLauncher from 'expo-intent-launcher';
IntentLauncher.startActivityAsync('android.intent.action.MAIN',{
category: 'android.intent.category.APP_GALLERY',})