Шаг 1: Получить файл, который я хотел бы сохранить (в данном случае небольшой png).
var fileBytes = getFileBytes();
Шаг 2: Получить URI контента с Google Drive.
var intent = new Intent(Intent.ActionCreateDocument);
intent.AddCategory(Intent.CategoryOpenable);
intent.SetType(mimeType);
intent.PutExtra(Intent.ExtraTitle, fileNameWithExtension);
StartActivityForResult(Intent.CreateChooser(intent, "Select Save Location"), 43);
Шаг 3: Создайте FileOutputStream
для обработки записи для поставщика контента.
protected override async void OnActivityResult (int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult (requestCode, resultCode, data);
if (resultCode == Result.Canceled && requestCode == 43) {
using (var pFD = ContentResolver.OpenFileDescriptor(data.Data, "w"))
using (var outputSteam = new FileOutputStream(pFD.FileDescriptor))
{
await outputSteam.WriteAsync(fileBytes);
}
}
}
Этот код работает, если я сохраняю файл локально. Но когда я сохраняю файл в Google Drive, файл там, но он имеет 0 байтов. Это связано с тем, что, если я делаю это правильно, и он не работает на Google Диске, то кто знает, будет ли он работать на других контент-провайдерах.
Для ясности, он создает файл на шаге 2. Так что код на шаге 3 правильный? Опять же, это работает, если я сохраняю файл локально.