奇怪的路径变化和遗忘的文件关联

时间:2018-05-17 13:07:49

标签: android xamarin.android file-handling intentfilter

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

要获取下载目录,我使用此代码 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将无法使用我的应用程序打开。文件关联似乎消失了。

我该如何解决这些问题?

1 个答案:

答案 0 :(得分:0)

  

当我试图获取相应的FileStream时,我得到一个异常,指出找不到指定的文件夹。

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

例如,您的路径以file:/开头:

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

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

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