使用intent.action.VIEW打开文件时如何获取文件URI?

时间:2017-06-15 12:15:13

标签: java android file android-intent uri

用户单击文件资源管理器中的 .txt 文件,然后出现“打开方式...”对话框,并列出我的应用程序。 当我尝试打开文件时,我想获得它的绝对路径。我得到的只是内容:// URI

I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=content://com.android.providers.downloads.documents/document/1031 typ=text/plain

如果我想检索文件的路径,我需要获取file:// URI。如何才能获得file:// URI而不是content://

这是AndroidManifest

        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />    
            <data android:mimeType="text/*"/>
        </intent-filter>

以下是我尝试处理文件的方法:

Intent i = getIntent();
String action = i.getAction();
String type = i.getType();

if (Intent.ACTION_VIEW.equals(action) && type != null) {
    Uri uri = i.getData();
    if (uri != null) {
        Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show();
    }                 
}

1 个答案:

答案 0 :(得分:2)

  

这是AndroidManifest

您的<intent-filter>表示您可以处理text/*内容,无论其来自哪个

  

当我尝试打开文件时,我想获得其绝对路径

然后,您需要将<data android:scheme="file">添加到<intent-filter>,以声明您只使用file计划。您的应用将不再显示为不使用file Uri值的应用中的选项,例如您正在使用的“文件管理器”。而且,由于在Android 7.0+上有效禁止file Uri值,因此随着时间的推移,您的应用程序的用处将会减少。到2020年左右,你的应用程序将毫无用处。

或者,你可以摆脱“想要获得其绝对路径”的要求。如果您要从filecontent Uri检索文字内容,可以在openInputStream()上使用ContentResolver,例如。