Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FilesManager : IFilesManager
- {
- private const int CREATE_FILE_REQUEST_CODE = 123;
- private static Context _context;
- public static void Init(Context context)
- {
- _context = context;
- }
- public async Task SaveFile(string fileName, byte[] content)
- {
- Intent intent = new Intent(Intent.ActionCreateDocument);
- intent.AddCategory(Intent.CategoryOpenable);
- intent.SetType(your_file_mimeType);
- intent.PutExtra(Intent.ExtraTitle, fileName);
- var activity = (MainActivity)_context;
- var listener = new ActivityResultListener(activity);
- activity.StartActivityForResult(intent, CREATE_FILE_REQUEST_CODE);
- var result = await listener.Task;
- if (result == null)
- {
- // Cancelled by user
- return;
- }
- using (Stream os = _context.ContentResolver.OpenOutputStream(result.Data))
- {
- os?.Write(content);
- os?.Close();
- }
- }
- private class ActivityResultListener
- {
- private readonly TaskCompletionSource<Intent> Complete = new TaskCompletionSource<Intent>();
- public Task<Intent> Task { get { return this.Complete.Task; } }
- public ActivityResultListener(MainActivity activity)
- {
- // subscribe to activity results
- activity.ActivityResult += OnActivityResult;
- }
- private void OnActivityResult(int requestCode, Result resultCode, Intent data)
- {
- if(requestCode != CREATE_FILE_REQUEST_CODE)
- {
- return;
- }
- // unsubscribe from activity results
- var activity = (MainActivity)_context;
- activity.ActivityResult -= OnActivityResult;
- // process result
- if (resultCode == Result.Ok)
- {
- Complete.TrySetResult(data);
- }
- else
- {
- Complete.TrySetResult(null);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement