Owe*_*wen 5 android android-intent react-native expo
我们有一个托管的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) } />} />
)
}
}
Run Code Online (Sandbox Code Playgroud)
我们已经从https://chromium.googlesource.com/android_tools/+/febed84a3a3cb7c2cb80d580d79c31e22e9643a5/sdk/platforms/android-23/data/activity/actions.txt中删除了意图列表
但是,几乎可以到达那里的唯一android.intent.action.VIEW
应用程序只是打开一个随机的应用程序列表,这些应用程序都无法处理图像-我们还传入了mime类型,例如image/jpeg
,image/*
希望可以过滤列表。
在Android上仅允许用户在适当的应用程序中打开文件的正确方法是什么?
使用Expo SDK 34(我使用expo 34.0.3,因为存在字体无法解析的问题),您可以像这样进行打开列表。但这不是打开列表的正确解决方案。因为用户必须做一些这样的工作。
Run Code Online (Sandbox Code Playgroud)await Sharing.shareAsync( fileUri, {dialogTitle: 'share or copy your pdf via'} ).catch(error =>{ console.log(error); })
如果您通过提供本地文件 URI 来执行此操作,您可以看到如下所示的底部操作表。然后用户可以选择复制到选项并将其粘贴到某个位置。之后用户可以打开文件,然后操作系统询问将使用什么应用程序来打开您的文件。
归档时间: |
|
查看次数: |
303 次 |
最近记录: |