实时

您的位置:首页>企业 >

MAUI Android 关联文件类型

实现效果

打开某个文件,后缀是自己想要的类型,在弹出的窗口(用其它应用打开)的列表中显示自己的应用图标

点击后可以获得文件信息以便于后续的操作

实现步骤

以注册.bin后缀为例,新建一个MAUI项目


(相关资料图)

调整启动模式

修改Platforms\Android\MainActivity.cs

[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]

调整为

[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density, LaunchMode = LaunchMode.SingleTop)]

末尾增加了LaunchMode = LaunchMode.SingleTop

更改启动模式为栈顶模式,解释如下

SingleTop模式又称栈顶模式,每次启动一个Activity的时候,首先会判断当前任务栈的栈顶是否存在该Activity实例,如果存在则重用该Activity实例,并且回调其onNewIntent()函数,否则就创建一个新实例。

这样,我们就可以在回调函数中获得文件路径

注册关联类型

还是修改Platforms\Android\MainActivity.cs

Activevity注册的下一行添加

[IntentFilter(new[] { Intent.ActionSend, Intent.ActionView }, Categories = new[] { Intent.CategoryDefault }, DataMimeType = @"application/octet-stream")]//.bin文件关联

application/octet-streamBin的Mime类型,根据自己的文件后缀,可以查询所有官方 MIME 类型的列表

监听意图

重写OnNewIntent拿到意图,并从中获取数据,通过 Messenger 进行数据传递

也可以通过试图跳转进行传递,具体参考:MAUI文档-传递数据

新建一个消息模型

引用 CommunityToolkit.Mvvm NuGet 包

创建消息模型

namespace ITLDG.Message{    public class NewFileMessage : ValueChangedMessage    {        public NewFileMessage(Android.Net.Uri uri) : base(uri)        {        }    }}
发送消息
using Android.Content;//引用这个...public class MainActivity : MauiAppCompatActivity    {...        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            //这里调用下,不然首次启动没有意图            OnNewIntent(Intent);        }        protected override void OnNewIntent(Intent intent)        {            base.OnNewIntent(intent);            if (intent.Action == Intent.ActionView)            {                WeakReferenceMessenger.Default.Send(new NewFileMessage(intent.Data));            }        }...    }...
接收消息

ViewModel中接收消息

WeakReferenceMessenger.Default.Register(this, (r, m) =>{    if (m.Value == null) return;    var intent = m.Value;    //文件路径    // var path = intent.Path    //得到文件流    var stream = CurrentActivity.ContentResolver.OpenInputStream(intent);    var memoryStream = new MemoryStream();    stream.CopyTo(memoryStream);    //完整的数据    var bytes=memoryStream.ToArray()});
总结

起初,我使用视图跳转传递参数的方式传递获取到的Intent,尝试了几次无法传递到MainPage

后加了一个跳转页,拿到消息后传到到中转页,中专页拿到数据后再将数据回穿回来,但是这样传递,无法传递Intent类型和Uri类型,我不得不先将文件写到缓存目录,再传递缓存目录

这样的流程始终无法满意,最终改为使用Messenger 进行数据传递,问题解决

另外,起初首次打开文件唤醒APP,无法获取到Intent,APP后台运行打开文件唤醒正常

后来在stackoverflow找到了答案

关键词:

推荐阅读
实现效果打开某个文件,后缀是自己想要的类型,在弹出的窗口(用其它应用打开)的列表中显示自己的应用图标点

2023-05-26 18:45:49

南方财经5月26日电,博汇股份披露投资者关系活动记录表显示,公司主要业务为研发、生产、销售应用于多领域

2023-05-26 18:10:02

大部分年轻人生活节奏快,每天忙奔波于工作中,自己在家洗衣机洗出来的衣物,晾晒完都会有褶皱,为了自身形

2023-05-26 17:45:04

截至2023年5月26日收盘,得润电子(002055)报收于8 57元,上涨0 82%,换手率1 15%,成交量6 8万手,成交额5784 32万元。

2023-05-26 16:26:37

海通证券研究所早报

2023-05-26 15:54:56

1、具体的评级还是看下国标吧。2、电泳漆检测方法里有。本文到此分享完毕,希望对大家有所帮助。

2023-05-26 15:28:20

信里,罗老师对王应华医生及其团队长期以来对他及家人的关心关怀和负责任的工作态度反复致谢。

2023-05-26 14:22:32

失控的直播打赏:兄弟俩用父亲死亡赔偿金打赏上百万,疯狂,打赏,直播间,赔偿金,女主播

2023-05-26 13:11:34

5月25日,随着最后一片钢箱梁吊装完成,G6东二环互通立交工程完成本次F匝道上跨东二环快速路钢箱梁架设作业

2023-05-26 12:58:58

“我的腿受伤好几天了,一直都很痛,也不方便到市里大医院。没想到在卫生院也能看上市人民医院的医生,现在

2023-05-26 11:57:10

05月25日,寒武纪被沪股通减持13 46万股,已连续3日被沪股通减持,共计66 42万股

2023-05-26 11:01:14

目前,烟台市在建项目147个,完成投资82 3亿元;在谈项目52个,计划总投资512 4亿元。

2023-05-26 10:09:43

每经AI快讯,中山发布官微消息,5月24日,中山市政府、明阳集团与德国诺曼艾索集团(下称NEA)签署三方战略

2023-05-26 08:52:12

科技日报北京5月25日电(记者张佳欣)瑞典和法国的一个国际研究小组成功开发出一种能够杀死侵袭性脑瘤——

2023-05-26 07:55:41

当下,北京迎来博物馆建设数量快速增长阶段,逛博物馆已成为京城市民的一种休闲方式。然而,在众多博物馆快

2023-05-26 06:59:11

来为大家解答以下的问题,坪房间的侵略者08,三坪房间的侵略者这个很多人还不知道,现在让我们一起来看看吧

2023-05-26 05:57:36

1、法院判决书可以在中国裁判文书网上查询得到,2013年7月,《最高人民法院裁判文书上网公布暂行办法》正式

2023-05-26 04:49:51

想必现在有很多小伙伴对于Yeah虚拟小号真的是郑爽的微博吗方面的知识都比较想要了解,那么今天小好小编就为

2023-05-26 04:04:32

1、如果你将来想找和英语相关的职业。2、这个口语考试就特别的有用!如去外企上班会有要求!建议用闪过英语

2023-05-26 03:01:54

随着投资理财市场的发展,场内基金成了越来越多投资者的选择。然而对于一些新手投资者来说,可能对场内基金

2023-05-26 02:09:13