Странные изменения пути и забытые ассоциации файлов - PullRequest
0 голосов
/ 17 мая 2018

Я хочу, чтобы мое приложение экспортировало данные в каталог загрузок.

Чтобы получить каталог загрузок, я использую этот код 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>

Теперь, когда я использую файловый браузер (от Samsung) и перехожу в каталог загрузок, я вижу свой файл.После нажатия на указанный файл создается мой ImportActivity, и я получаю путь к файлу "/device_storage/Download/myfile.ext" (тот же файл в другом каталоге).Когда я пытаюсь получить соответствующий FileStream, я получаю исключение, что указанная папка не может быть найдена.Это моя первая проблема.

Моя вторая проблема заключается в том, что после просмотра содержимого папки загрузки в проводнике Windows или после перезагрузки устройства myfile.ext не открывается в моем приложении.Кажется, что нет связи с файлами.

Как я могу решить эти проблемы?

1 Ответ

0 голосов
/ 21 мая 2018

Когда я пытаюсь получить соответствующий 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 Explorer приложением для управления файлами?Некоторые приложения могут отображать не все доступные приложения для открытия файла, вы можете попробовать использовать другой файловый менеджер.

...