将文件URI从SD卡传递给ACTION_VIEW Intent

时间:2017-10-27 07:31:05

标签: android uri android-fileprovider

我正在更新我的Android 6及更高版本的应用之一。该应用程序允许您将文件附加到其数据以提供更多信息。这可以是使用相机拍摄的图像,来自图库的图像,或来自文件系统的随机文件。我有一个ListView,显示附加的文件及其元数据,并onItemClick我想向用户显示它们。我曾经用

获取该文件的URI
Uri.fromFile(f)

但据我所知不再支持此功能。现在我的代码看起来像这样

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    doc = getItem(arg2);
    File f = doc.getFile(context);

    if (f.exists()) {
        Intent myIntent = new Intent(Intent.ACTION_VIEW);
        myIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        String mime = "";

        try {

            Uri uri = FileProvider.getUriForFile(context, android.support.v4.BuildConfig.APPLICATION_ID + ".provider", f);

            mime = URLConnection.guessContentTypeFromStream(new FileInputStream(f));
            if (mime == null) mime = URLConnection.guessContentTypeFromName(f.getName());

            myIntent.setDataAndType(uri, mime);
            context.startActivity(myIntent);

        } catch (Exception e) {
            e.printStackTrace();
        }

    } else {
       //Error handling
    }
}

这适用于手机存储上的文件。但由于FileProvider无法处理可安装存储上的文件,因此会抛出异常。我的问题是:如何在不使用FileProvider的情况下获取文件URI?

0 个答案:

没有答案