Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何处理从其他应用程序发送的所有意图_Android_Android Intent_Xamarin.android - Fatal编程技术网

Android:如何处理从其他应用程序发送的所有意图

Android:如何处理从其他应用程序发送的所有意图,android,android-intent,xamarin.android,Android,Android Intent,Xamarin.android,我目前允许应用程序将文件发送到我的应用程序,以便我的应用程序可以将此文件发送到将显示该文件的设备。我使用了Action\u Send/Action\u View 我意识到从其他应用程序发送的意图可能不一样 这就是我所实现的 要采取行动,请发送 额外的_流将具有数据的Uri。在此uri中,如果它具有方案内容:// 我会去救商店的 private string HandleImportUriWithContentProvider(Android.Net.Uri uri) {

我目前允许应用程序将文件发送到我的应用程序,以便我的应用程序可以将此文件发送到将显示该文件的设备。我使用了Action\u Send/Action\u View

我意识到从其他应用程序发送的意图可能不一样

这就是我所实现的

要采取行动,请发送

额外的_流将具有数据的Uri。在此uri中,如果它具有方案内容://

我会去救商店的

private string HandleImportUriWithContentProvider(Android.Net.Uri uri)
    {
        var context = Forms.Context;
        var document = DocumentFile.FromSingleUri(context, uri);

        using (var stream = context.ContentResolver.OpenInputStream(uri))
        {
            var mime = MimeTypeMap.GetFileExtensionFromUrl(document.Name);
            if (!String.IsNullOrEmpty(mime))
            {
                var file = FileUtilities.SaveStreamToApplicationCache(context, stream, document.Name);

                if (!String.IsNullOrEmpty(file))
                {
                    App.IsCachedFile = true;
                    return file;//await App.ReceiveFileFromThirdParty(file, isStartup);
                }
            }
            return "";
        }
    }
否则它只是一个文件路径

在Action_视图中,数据可以是content://或path

如果是content://我将通过context.ContentResolver执行与上面相同的读取流操作

还有什么我不知道的吗


我知道每个应用程序都可以发送不同的数据

如果Xamarin的
DocumentFile
与Android的
DocumentFile
匹配,则不要将
document.Name
用作文件扩展名的基础<代码>文档。名称是一个显示名称,不必具有任何文件扩展名。使用
ContentResolver
getType()
获取与
Uri
关联的MIME类型。此外,具有除内容以外的方案的
Uri
不仅仅是“文件路径”。
Uri
总是有一个方案(例如,
文件
http
,等等)。对于
ACTION\u SEND
,该模式可以是任何内容。对于
ACTION\u视图
,您在
中公布了您支持的方案。getType在某个时候会为空吗?对于操作_Send,我可以使用scheme filter过滤掉文件,因为我只处理本地文件中的文件。方案也会为空吗。“getType在某个点上会为空吗?”--它不应该为
null
,尽管您可能希望在防御性编程中检查它。“scheme是否也会为null”--它也不应该为
null
,尽管您可能希望在防御编程中检查它。我在emulator中使用了Gallery,并意识到intent对象中的scheme属性为null,但uri.scheme中的scheme属性为content。我不知道文件路径本身。它可以是file://或/storage/0/something