使用React Native中的默认设备应用程序打开.pdf,.docx,.xlsx等

时间:2017-02-26 04:23:46

标签: android react-native

我正在尝试使用React Native打开.pdf,.docx,.xlsx和其他类似文件。

我目前正在将文件从亚马逊s3存储桶下载到设备,然后尝试使用react-native-fetch-blob android.actionViewIntent(res.path(), mimeType)在设备上打开它们。

这适用于图像,但除了其他任何我收到以下错误:

Error: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/myappname/files/1475.pdf typ=application/pdf flg=0x10000000 }

编辑:对于那些希望看到最终工作的实现的人(使用react-native-file-system和react-native-fetch-blob):

const fileType = fileDownloadPath.split('.').pop();
const SavePath = Platform.OS === 'ios' ? RNFS.DocumentDirectoryPath : RNFS.ExternalDirectoryPath;
const mimeType = getMimeType(fileType); // getMimeType is a method (switch statement) that returns the correct mimetype
const path = `${SavePath}/${filename}.${fileType}`;
const android = RNFetchBlob.android;

RNFS.downloadFile({
  fromUrl: url,
  toFile: path,
}).promise.then(() => {
  android.actionViewIntent(path, mimeType)
    .then((success) => {
      console.log('success: ', success)
    })
    .catch((err) => {
      console.log('err:', err)
    })
});

2 个答案:

答案 0 :(得分:4)

显然,您的设备没有安装其他文件查看器应用程序,例如Polaris办公室或Office套件或任何其他类型的文件查看器。

通常,这是您遇到此类问题的例外情况。您可以显示警告/烤面包或显示一些链接以从Play商店下载这些应用程序。

答案 1 :(得分:0)

我有这个,这是一种解决方法。

  try{
    startActivity(intent);
  } catch (ActivityNotFoundException e){
    Toast.makeText(MainActivity.this,
            "Error showing pdf", Toast.LENGTH_LONG).show();
  }