使用外部Intent / Application打开文件

时间:2016-10-16 14:18:17

标签: java android file android-intent io

在应用程序的fileDirectory中创建文件后,我想用Adobe Reader等外部应用程序打开它。为了实现这一点,我尝试在下面的代码中使用Intent

ContextWrapper cw = new ContextWrapper(getApplicationContext());
java.io.File fileItem = new java.io.File(cw.getFilesDir() + "/sync/arbitraryFileName.extension");

MimeTypeMap myMime = MimeTypeMap.getSingleton();
Intent newIntent = new Intent(Intent.ACTION_VIEW);
String fileExtension = StaticHelper.fileExt(((File) item).getFileName());
if (fileExtension != null) {
    String mimeType = myMime.getMimeTypeFromExtension(fileExtension);
    String bb = Uri.fromFile(fileItem).toString();
    newIntent.setDataAndType(Uri.fromFile(fileItem), mimeType);
    newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    try {
        getApplicationContext().startActivity(newIntent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
    }
} else {
    Toast.makeText(getApplicationContext(), "no extension found", Toast.LENGTH_SHORT).show();
}

但遗憾的是这段代码不起作用:应用程序总是说该文件不存在 - 但在设备的ADB shell中,我可以找到与我的代码中使用的路径完全相同的文件。 我已经添加了

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在我的代码中,但它根本没用。

1 个答案:

答案 0 :(得分:2)

第三方应用无权访问您应用的internal storage部分。使用类似FileProvider to make this content available to other apps的内容。

此外:

  • 在上面显示的代码中将所有getApplicationContext()替换为this。只有当您知道确切原因时才使用getApplicationContext()。{/ p>

  • 摆脱getApplicationContext(),因为你不需要它。