gpt4 book ai didi

android - 在设备上使用其在 react-native 中的默认应用程序打开文件(pdf、word、excel、png 等)

转载 作者:可可西里 更新时间:2023-11-01 05:49:14 36 4
gpt4 key购买 nike

我正在使用 react-native-fs下载文件(pdf、word、excel、png 等),我需要在其他应用程序中打开它。是否可以用 Linking 打开下载的文件或者更好地打开一个对话框,其中包含可能的应用程序,例如使用 Sharing 时?下面代码中的 Linking 尝试打开该文件,但它会在没有任何通知的情况下立即关闭,但我的应用程序仍然运行良好。是否有一些特殊的方法来构建用于特定文件类型的深度链接的 URL?对最佳解决方案有什么想法吗?

我看到有旧包react-native-file-opener但它不再维护。这个解决方案会很棒。

下载组件的简化代码:

import React, { Component } from 'react';
import { Text, View, Linking, TouchableOpacity } from 'react-native';
import { Icon } from 'react-native-elements';
import RNFS from 'react-native-fs';

import { showToast } from '../../services/toasts';

class DownloadFile extends Component {
state = {
isDone: false,
};

handleDeepLinkPress = (url) => {
Linking.openURL(url).catch(() => {
showToast('defaultError');
});
};

handleDownloadFile = () => {
RNFS.downloadFile({
fromUrl: 'https://www.toyota.com/content/ebrochure/2018/avalon_ebrochure.pdf',
toFile: `${RNFS.DocumentDirectoryPath}/car.pdf`,
}).promise.then(() => {
this.setState({ isDone: true });
});
};

render() {
const preview = this.state.isDone
? (<View>
<Icon
raised
name="file-image-o"
type="font-awesome"
color="#f50"
onPress={() => this.handleDeepLinkPress(`file://${RNFS.DocumentDirectoryPath}/car.pdf`)}
/>
<Text>{`file://${RNFS.DocumentDirectoryPath}/car.pdf`}</Text>
</View>)
: null;
return (
<View>
<TouchableOpacity onPress={this.handleDownloadFile}>
<Text>Download File</Text>
</TouchableOpacity>
{preview}
</View>
);
}
}

export default DownloadFile;

最佳答案

经过一些研究,我决定使用 react-native-fetch-blob .从版本 0.9.0 开始,可以使用 Intent 打开下载的文件并使用 下载管理器。它还具有 API for iOS用于打开文档。

现在编码:

...
const dirs = RNFetchBlob.fs.dirs;
const android = RNFetchBlob.android;
...

handleDownload = () => {
RNFetchBlob.config({
addAndroidDownloads: {
title: 'CatHat1.jpg',
useDownloadManager: true,
mediaScannable: true,
notification: true,
description: 'File downloaded by download manager.',
path: `${dirs.DownloadDir}/CatHat1.jpg`,
},
})
.fetch('GET', 'http://www.swapmeetdave.com/Humor/Cats/CatHat1.jpg')
.then((res) => {
this.setState({ path: res.path() });
})
.catch((err) => console.log(err));
};

...
render() {
...
<Icon
raised
name="file-pdf-o"
type="font-awesome"
color="#f50"
onPress={() => android.actionViewIntent(this.state.path, 'image/jpg')}
...
}

关于android - 在设备上使用其在 react-native 中的默认应用程序打开文件(pdf、word、excel、png 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180225/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com