Да, путь к каталогу, который вы получаете:
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
Он указывает где-то в /data/user/
, который будет закрыт для приложения. Если вы хотите сделать его доступным для просмотра с помощью приложения File Explorer, вам, вероятно, потребуется сохранить его где-нибудь во внешнем хранилище (общедоступном хранилище).
Вы можете получить путь для этого с помощью:
var externalDir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments);
Если вы ориентируетесь на Android API 18 и ниже, не забудьте добавить разрешения для этого в свой AndroidManifest:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
Поскольку некоторые устройства на Android могут иметь свое внешнее хранилище на картах microSD, вы будетенеобходимо проверить, можете ли вы сначала написать в него:
var stateOk = Android.OS.Environment.ExternalStorageState == Android.OS.Environment.MediaMounted;
if (stateOk)
{
// I can write!
}
Начиная с версии Android API 23 и выше, вам потребуется запросить разрешение, прежде чем вы сможете читать и записывать на внешнее хранилище. Вы можете использовать этот плагин, чтобы легко запрашивать разрешения: https://github.com/jamesmontemagno/PermissionsPlugin
Еще одна пара вещей, на которые стоит обратить внимание. Вы используете .Result
для вашего ReadAsStreamAsync()
вызова. Просто помните, что вы будете блокировать поток, на котором находитесь. Я настоятельно рекомендую вам разрабатывать свои методы так, чтобы они были полностью асинхронными.