用户单击文件资源管理器中的 .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();
}
}
答案 0 :(得分:2)
这是AndroidManifest
您的<intent-filter>
表示您可以处理text/*
内容,无论其来自哪个。
当我尝试打开文件时,我想获得其绝对路径
然后,您需要将<data android:scheme="file">
添加到<intent-filter>
,以声明您只使用file
计划。您的应用将不再显示为不使用file
Uri
值的应用中的选项,例如您正在使用的“文件管理器”。而且,由于在Android 7.0+上有效禁止file
Uri
值,因此随着时间的推移,您的应用程序的用处将会减少。到2020年左右,你的应用程序将毫无用处。
或者,你可以摆脱“想要获得其绝对路径”的要求。如果您要从file
或content
Uri
检索文字内容,可以在openInputStream()
上使用ContentResolver
,例如。