Android intent 导出Xamarin/Android的文件意图

Android intent 导出Xamarin/Android的文件意图,android-intent,xamarin.forms,xamarin.android,Android Intent,Xamarin.forms,Xamarin.android,我的Xamarin Forms应用程序需要将数据文件(加密的字节流)导出到用户选择的外部位置(OneDrive或Google Drive等) 它适用于iOS和UWP,但安卓却难住了我。在iOS上,我使用UIDocumentPickerViewController和模式导出到服务和(在UWP上)FileSavePicker。对于Android,我尝试过使用ActionSend意图,但没有效果 我最近一次失败的尝试是: var intent = new Intent(Intent.ActionSen

我的Xamarin Forms应用程序需要将数据文件(加密的字节流)导出到用户选择的外部位置(OneDrive或Google Drive等)

它适用于iOS和UWP,但安卓却难住了我。在iOS上,我使用UIDocumentPickerViewController和模式导出到服务和(在UWP上)FileSavePicker。对于Android,我尝试过使用ActionSend意图,但没有效果

我最近一次失败的尝试是:

var intent = new Intent(Intent.ActionSend);
intent.PutExtra(Intent.ExtraStream, uri);
intent.SetType("*/*");
intent.SetFlags(ActivityFlags.NewTask);
Application.Context.StartActivity(intent);
有没有更好的意图或方式来称呼这个?我的主要要求是能够将文件共享到OneDrive或Google Drive

有没有更好的方法来实现这一点?我的主要要求是能够将文件写入OneDrive或Google Drive

尝试将文件写入Google Drive或OneDrive不是一个好方法,因为与桌面不同,手机上的OneDrive/GoogleDrive不会出于性能原因自动同步文件(上传到云)

请考虑使用云API进行OnDeRiVE或谷歌驱动器:

  • 对于Google Drive,您可以使用

    正式文件:

    官方演示:

    或者你可以使用

  • 对于一个驱动器,您可以使用Microsoft Graph API:

    正式文件:

    官方演示:


  • 我发现的问题是,我正在使用URI.FromFile()来获取要共享的url

    我发现使用文件提供程序和调用FileProvider.GetUriForFile()成功。有关设置和使用文件提供的文档,请访问

    代码摘录:

    var file = new Java.IO.File(sourceFilePath);
    var fileUri = FileProvider.GetUriForFile(Application.Context, "com.your-company.Xyzzy.fileprovider", file);
    if ( fileUri != null ) {
        var shareIntent = new Intent(Intent.ActionSend);
        shareIntent.PutExtra(Intent.ExtraStream, fileUri);
        shareIntent.SetDataAndType(fileUri, Application.Context.ContentResolver.GetType(fileUri));
        shareIntent.SetFlags(ActivityFlags.GrantReadUriPermission);
        shareIntent.SetFlags(ActivityFlags.NewTask);
        StartActivityForResult(shareIntent, 0);
    }
    

    唯一的缺点是“活动结果”会立即返回“已取消”,因此在用户完成时不会进行确认。我将在另一篇文章中解决这个问题。

    正如问题所述,我特别希望Android能够实现这一点。我不确定你为什么会说这是一个糟糕的方法。除此之外,如何共享数据?这就是为什么我们有云服务。iOS和UWP为我们提供了方便的方法。我正在寻找提供类似行为的Android解决方案。