首页 > 解决方案 > 奇怪的路径更改和忘记的文件关联

问题描述

我希望我的应用程序将数据导出到下载目录。

要获取下载目录,我使用此代码 string path = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;

path变量具有值"/storage/emulated/0/Download"

当我将文件保存到Path.Combine(path, "myfile.ext")时,文件被正确保存。

为了使用我的应用打开该文件,我创建了一个ImportActivity带有附加intent-filter.

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:host="*" />
    <data android:mimeType="*/*" />
    <data android:pathPattern="/.*\\.ext" />
    <data android:scheme="file" />
    <data android:scheme="content" />
  </intent-filter>

现在,当我使用文件浏览器(三星的那个)并导航到下载目录时,我可以看到我的文件。点击所述文件后,我的文件ImportActivity被创建,我得到文件路径"/device_storage/Download/myfile.ext"(不同目录中的相同文件)。当我尝试获取相应的FileStream时,我得到一个找不到指定文件夹的异常。这是我的第一个问题。

我的第二个问题是,在 Windows 资源管理器中查看下载文件夹的内容或设备重置后,myfile.ext 将无法使用我的应用程序打开。文件关联似乎消失了。

我该如何解决这些问题?

标签: androidxamarin.androidfile-handlingintentfilter

解决方案


当我尝试获取相应的 FileStream 时,出现找不到指定文件夹的异常。

如果您获得路径形式的意图,它将根据不同的文件管理器以file:/of开头。content:/

例如,您的路径以file:/

        if(Intent.DataString != null)
        {
            string path = Intent.DataString;            
            var fs = new FileStream(path.Remove(0, 6), FileMode.Open);
        }

我的第二个问题是,在 Windows 资源管理器中查看下载文件夹的内容或设备重置后,myfile.ext 将无法使用我的应用程序打开。

Windows 资源管理器是文件管理器应用程序吗?某些应用程序可能无法显示所有可用的应用程序来打开文件,您可以尝试使用其他文件管理器。


推荐阅读