如何检测向我的.NET MAUI移动应用分享文件的来源应用(Android/iOS)
如何检测向我的.NET MAUI移动应用分享文件的来源应用(Android/iOS)
没问题,针对你用.NET MAUI开发、且ShareExtensions采用原生编码的场景,咱们可以分别在Android和iOS的原生扩展代码里实现来源应用的检测,具体操作如下:
Android 端实现
在你的Android分享扩展组件(比如处理分享的Activity或者自定义的Share Extension类)中,直接通过Intent相关API就能获取来源应用的包名:
- 首先在处理分享请求的代码里,尝试用
getCallingPackage()获取调用方包名:
String sourcePackageName = getCallingPackage();
- 如果
getCallingPackage()返回空值(比如通过系统分享面板间接调用的情况),可以从Intent的额外参数里兜底获取:
if (sourcePackageName == null) { sourcePackageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME); }
拿到这个包名后,你可以通过MAUI的跨端通信方式(比如MessagingCenter或者静态全局变量)把值传递到共享项目中,后续就能轻松判断是com.whatsapp还是com.google.android.apps.photos这类来源了。
iOS 端实现
iOS的Share Extension是独立进程,咱们可以通过扩展上下文的userInfo字典获取来源应用的Bundle ID:
在你的Share Extension的ViewController类中,添加以下代码:
if let originatingBundleID = extensionContext?.userInfo?[NSExtensionActivationOriginatingBundleIDKey] as? String { // originatingBundleID就是来源应用的唯一标识,比如com.whatsapp // 同样可以通过MAUI的跨端通信方式把这个值传到共享项目 }
注意: 这个API在iOS 14及以上版本可用,如果你需要兼容更低版本,可以考虑用extensionContext?.sourceApplication(不过这个API已被标记为废弃,仅做兼容兜底用)。
拿到来源应用的标识后,你就可以在MAUI的共享逻辑里做针对性的业务处理啦。
备注:内容来源于stack exchange,提问作者Alpay Çalışır
相关产品推荐
相关产品推荐

