Можно ли записать файл напрямую в Android.OS.Environment.ExternalStorageDirectory? - PullRequest
0 голосов
/ 19 мая 2018

Я пытался портировать старый код и пришел к методу, который записывает поток в файл перед отправкой его в виде вложения в электронное письмо.

Этот код в конечном итоге использует

var path = MediaStore.Images.Media.InsertImage(Forms.Context.ContentResolver, myBitmap, "My Bitmap", "MyBitmap.png");

чтобы сохранить файл.path в конечном итоге становится content://media/external/images/media/164, где 164 выглядит просто как сохраненная n-ная вещь.

Первоначально этот код не работал (только из-за разрешений, как оказалось), поэтому я попытался заменить его накакой-то нормальный C #:

string dir = Android.OS.Environment.ExternalStorageDirectory.ToString();
string filePath = System.IO.Path.Combine(dir, fileName);
using (System.IO.Stream file = System.IO.File.Create(filePath))
{
    myStream.CopyTo(file);
}

и он записал файл нормально.Этот путь выглядит как /storage/emulated/0/MyBitmap.png.


Теперь странно то, что я не могу прикрепить второй путь (/storage/emulated/0/MyBitmap.png) к электронной почте, даже если файл существует, не пустой, кодимеет доступ для чтения, а пользователь дал разрешение.Но первый путь (content://media/external/images/media/164) работает без проблем, хотя я и не ожидал, что он будет:

enter image description here

Можете ли вы сказать мне, что происходитВот?Я гуглил это и думал, что делаю так, чтобы это работало.Но для того, чтобы не только не работать, но и иметь другой способ сделать это, что не имеет смысла, работа действительно сбивает с толку.

1 Ответ

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

content: // uris разрешаются приложениями, чтобы предоставить InputStream для того, кто пытается его «разрешить», вы можете реализовать ContentProvider и обработать ваши внутренние пути и просто указать URI.ИЛИ попробуйте указать схему в виде файла: //storage/emu...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...