Advertisement
Guest User

Untitled

a guest
Nov 15th, 2021
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.05 KB | None | 0 0
  1. public class FilesManager : IFilesManager
  2. {
  3.     private const int CREATE_FILE_REQUEST_CODE = 123;
  4.     private static Context _context;
  5.    
  6.     public static void Init(Context context)
  7.     {
  8.         _context = context;
  9.     }
  10.  
  11.     public async Task SaveFile(string fileName, byte[] content)
  12.     {
  13.         Intent intent = new Intent(Intent.ActionCreateDocument);
  14.         intent.AddCategory(Intent.CategoryOpenable);
  15.         intent.SetType(your_file_mimeType);
  16.         intent.PutExtra(Intent.ExtraTitle, fileName);
  17.  
  18.         var activity = (MainActivity)_context;
  19.         var listener = new ActivityResultListener(activity);
  20.         activity.StartActivityForResult(intent, CREATE_FILE_REQUEST_CODE);
  21.  
  22.         var result = await listener.Task;
  23.  
  24.         if (result == null)
  25.         {
  26.             // Cancelled by user
  27.             return;
  28.         }
  29.  
  30.         using (Stream os = _context.ContentResolver.OpenOutputStream(result.Data))
  31.         {
  32.             os?.Write(content);
  33.             os?.Close();
  34.         }
  35.     }
  36.  
  37.     private class ActivityResultListener
  38.     {
  39.         private readonly TaskCompletionSource<Intent> Complete = new TaskCompletionSource<Intent>();
  40.         public Task<Intent> Task { get { return this.Complete.Task; } }
  41.  
  42.         public ActivityResultListener(MainActivity activity)
  43.         {
  44.             // subscribe to activity results
  45.             activity.ActivityResult += OnActivityResult;
  46.         }
  47.  
  48.         private void OnActivityResult(int requestCode, Result resultCode, Intent data)
  49.         {
  50.             if(requestCode != CREATE_FILE_REQUEST_CODE)
  51.             {
  52.                 return;
  53.             }
  54.  
  55.             // unsubscribe from activity results
  56.             var activity = (MainActivity)_context;
  57.             activity.ActivityResult -= OnActivityResult;
  58.  
  59.             // process result
  60.             if (resultCode == Result.Ok)
  61.             {
  62.                 Complete.TrySetResult(data);
  63.             }
  64.             else
  65.             {
  66.                 Complete.TrySetResult(null);
  67.             }
  68.         }
  69.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement