如何使用Xamarin.Essentials的Launcher类打开Microsoft PowerPoint应用?
问题解决方案
1. 适配Android 11+ 包可见性限制
这是最常见的触发原因,从Android 11(API等级30)开始,系统默认限制了应用查询其他已安装应用的能力,未声明查询权限的情况下TryOpenAsync无法识别到已安装的PowerPoint,会直接返回false。
解决方法:在Android项目的Properties/AndroidManifest.xml文件的manifest根节点下添加如下配置:
<queries> <!-- 声明需要查询PowerPoint包名 --> <package android:name="com.microsoft.office.powerpoint" /> <!-- 声明需要查询对应Scheme的跳转能力 --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="com.microsoft.office.powerpoint" /> <data android:scheme="ms-powerpoint" /> </intent> </queries>
2. 适配iOS端查询权限
如果同时适配iOS平台,需要在iOS项目的Info.plist文件中添加跳转白名单配置:
在Info.plist中新增LSApplicationQueriesSchemes数组,添加两个子项:
com.microsoft.office.powerpointms-powerpoint
对应的XML代码为:
<key>LSApplicationQueriesSchemes</key> <array> <string>com.microsoft.office.powerpoint</string> <string>ms-powerpoint</string> </array>
3. 优化跳转逻辑,兼容多版本Scheme
部分版本的PowerPoint注册的跳转Scheme为ms-powerpoint://,可以在代码中增加兼容逻辑,两种Scheme依次尝试:
private async void SlidesCommandTapped(object obj) { // 依次尝试两种通用Scheme bool opened = await Launcher.TryOpenAsync("ms-powerpoint://") || await Launcher.TryOpenAsync("com.microsoft.office.powerpoint://"); if (!opened) { await Launcher.OpenAsync(new Uri("market://details?id=com.microsoft.office.powerpoint")); } }
内容的提问来源于stack exchange,提问作者Navflash
相关产品推荐
相关产品推荐

