Ejemplo n.º 1
0
        private async Task <StorageFile?> PickSaveFileTaskAsync(CancellationToken token)
        {
            if (!(ContextHelper.Current is Activity appActivity))
            {
                throw new InvalidOperationException("Application activity is not yet set, API called too early.");
            }

            var action = Intent.ActionCreateDocument;

            var intent = new Intent(action);

            intent.SetType("*/*");
            intent.AddCategory(Intent.CategoryOpenable);
            var mimeTypes = GetMimeTypes();

            this.ParseMimeTypeForXml(mimeTypes);

            foreach (var mime in mimeTypes)
            {
                intent.PutExtra(Intent.ExtraMimeTypes, mime);
            }

            if (!string.IsNullOrEmpty(SuggestedFileName))
            {
                intent.PutExtra(Intent.ExtraTitle, SuggestedFileName);
            }

            var activity = await AwaitableResultActivity.StartAsync();

            var result = await activity.StartActivityForResultAsync(intent, cacellationToken : token);

            var resultIntent = result?.Intent;

            if (resultIntent?.Data != null)
            {
                return(StorageFile.GetFromSafUri(resultIntent.Data));
            }
            else if (resultIntent?.ClipData != null && resultIntent.ClipData.ItemCount > 0)
            {
                for (int itemIndex = 0; itemIndex < resultIntent.ClipData.ItemCount; itemIndex++)
                {
                    var uri = resultIntent.ClipData.GetItemAt(itemIndex)?.Uri;
                    if (uri != null)
                    {
                        return(StorageFile.GetFromSafUri(uri));
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 2
0
        private static async Task <ComponentName> ResolveEmailComponent()
        {
            var packageManager = Application.Context.PackageManager;

            var emailDummyIntent = new Intent(Intent.ActionSendto);

            emailDummyIntent.SetData(Android.Net.Uri.Parse("mailto:[email protected]"));

            var emailActivities = packageManager.QueryIntentActivities(emailDummyIntent, 0);

            if (emailActivities == null)
            {
                return(null);
            }

            if (emailActivities.Count == 1)
            {
                return(GetComponentName(emailActivities[0]));
            }

            var defaultHandler = emailActivities.FirstOrDefault(e => e.IsDefault);

            if (defaultHandler != null)
            {
                return(GetComponentName(defaultHandler));
            }

            var intentPick = new Intent();

            intentPick.SetAction(Intent.ActionPickActivity);
            intentPick.PutExtra(Intent.ExtraIntent, emailDummyIntent);

            var awaitableResultActivity = await AwaitableResultActivity.StartAsync();

            var result = await awaitableResultActivity.StartActivityForResultAsync(intentPick, HandlerPickerResultCode);

            if (result.Result == Result.Ok)
            {
                return(result.Intent.Component);
            }
            return(null);
        }