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