Tencent / Shadow

零反射全动态Android插件框架
BSD 3-Clause "New" or "Revised" License
7.47k stars 1.3k forks source link

在插件中使用packageManager.queryIntentActivities(@NonNull Intent intent, int flags) #1323

Closed dhs964057117 closed 6 months ago

dhs964057117 commented 6 months ago

您好请教一个问题,当我在插件中使用packageManager.queryIntentActivities(@NonNull Intent intent, int flags)来检查是否有处理该Intent的activity时,返回了空的列表,但实际上是有匹配该intent的action的,我看代码shadow中使用宿主的代理对象去处理这个方法,检查的应该是宿主的activity,这里要改成检测插件是不是需要自己去判断是否是插件环境并且去复写queryIntentActivities(@NonNull Intent intent, int flags)方法 image 例如这样: image

shifujun commented 6 months ago

大概是要override后做一些插件相关的信息转换,但我当下不了解queryIntentActivities的具体功能,所以也不确定具体应该做什么。

你如果能理解其他类似的api是怎么实现的支持代码,应该就能模仿着实现这个queryIntentActivities的支持。

如果确实有困难,可以在sample中演示一下这个api的功能,我再去具体看看怎么实现。

如果实现后能提PR回来,是非常欢迎的!

dhs964057117 commented 6 months ago

大概是要override后做一些插件相关的信息转换,但我当下不了解queryIntentActivities的具体功能,所以也不确定具体应该做什么。

你如果能理解其他类似的api是怎么实现的支持代码,应该就能模仿着实现这个queryIntentActivities的支持。

如果确实有困难,可以在sample中演示一下这个api的功能,我再去具体看看怎么实现。

如果实现后能提PR回来,是非常欢迎的!

好的谢谢大佬,我会尝试一下实现该api的,如果没什么问题也会提PR的。

dhs964057117 commented 6 months ago

您好大佬,今天在实现queryIntentActivities这个 api的时候遇到了一点问题,麻烦指导一下呢谢谢您代码链接 我在通过intent action去查找插件的activityInfo构造ResolveInfo的时候才发现最后得到的类型不一致。不知道这里应该怎么处理了 image

dhs964057117 commented 6 months ago

补充一下代码仓库地址

shifujun commented 6 months ago

>发现最后得到的类型不一致

预期是什么,实际是什么?

dhs964057117 commented 6 months ago

>发现最后得到的类型不一致

预期是什么,实际是什么? 这个功能实际上期望是查询插件中是否有处理该intent中action的activity, 然后这里这个api 构造ResolveInfo中需要的ActivityInfo使用的是android.content.pm.ActivityInfo而这里插件返回的是com.tencent.shadow.core.runtime.PluginManifest.ActivityInfo,类型无法匹配

dhs964057117 commented 6 months ago

哦解决了,中间使用componentManager.findComponent根据action查找插件包中处理该action的activity的component,再使用getActivityInfo既可以转换成插件包正确的类型了 image