我们有一个托管的 expo 应用程序,它正在使用 FileSystem.downloadAsync
,这没问题。
我们有一个 FlatList
,它显示下载文件的列表。
我们不想为世界上的每个应用程序构建一个文件查看器,这不是我们的目标。
我们希望能够从列表中点击一个文件,并可能使用 Android Intent 系统向用户提供他们已经安装的可以处理该文件类型的应用列表。
例如我们有类似的东西
class FileBrowser extends Component {
state = {
files: [
{
key: '1'
name: 'file.jpg',
sys_path: 'file://blah.jpg'
}
]
}
openFile(item) {
IntentLauncherAndroid.startActivityAsync(
'android.intent.action.OPEN_DOCUMENT', {
data: item.sys_path
})
}
render() {
return (
<FlatList data={ this.state.files } renderItem={ (item) => <Button title={ item.name } onPress={ this.openFile(item) } />} />
)
}
}
我们几乎已经用尽了 https://chromium.googlesource.com/android_tools/+/febed84a3a3cb7c2cb80d580d79c31e22e9643a5/sdk/platforms/android-23/data/activity_actions.txt 中的 Intent 列表
唯一几乎到达那里的是 android.intent.action.VIEW
但是它只是打开一个随机的应用程序列表,其中没有一个可以处理图像 - 我们还传入了 mime 类型,例如image/jpeg
或 image/*
希望能过滤列表。
在 Android 上仅提供用户在适当的应用程序中打开文件的正确方法是什么?
最佳答案
使用 Expo SDK 34(我使用 expo 34.0.3 因为存在字体无法解决的问题),您可以通过这种方式打开列表。但这不是打开列表的正确解决方案。因为用户必须做一些这样的工作。
await Sharing.shareAsync( fileUri, {dialogTitle: 'share or copy your pdf via'} ).catch(error =>{ console.log(error); })
如果您通过提供本地文件 URI 来执行此操作,您可以看到如下所示的底部操作表。然后用户可以选择复制到选项并将其粘贴到某个位置。在该用户可以打开文件之后,操作系统会询问将使用什么应用程序来打开您的文件。
关于android - React Native + Expo - 触发 android Intent 打开本地存储的文件。 (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56147618/