如何设置ComponentName?跨应用发送Broadcast的组件写法咨询
正确的ComponentName设置方案解析
嘿,我来帮你理清这个ComponentName的正确写法~
首先得明确ComponentName的两个核心参数规则:
- 第一个参数是目标应用的正式包名,必须和目标应用在Manifest里声明的
package属性完全一致; - 第二个参数是目标类的完整全限定类名,也就是从应用根包名开始,加上类所在的所有子目录路径,最后加上类名的完整字符串。
结合你的需求:目标应用包名为com.android.cci,目标类位于engtest目录下,类名为FtmEngButtons,我们逐个分析选项:
正确选项:
ComponentName("com.android.cci", "com.android.cci.engtest.FtmEngButtons");
这个写法完全符合规则:第一个参数是目标应用的包名,第二个参数是类的完整全限定名(根包名+子目录+类名),系统能准确找到目标组件。错误选项分析:
ComponentName("com.android.cci.engtest", "FtmEngButtons");:第一个参数填了子目录路径而非应用包名,第二个参数仅写了类名没有完整路径,系统无法定位到目标应用和类。ComponentName("com.android.cci", "com.android.cci.FtmEngButtons");:第二个参数缺少了engtest子目录部分,系统会去应用根包下寻找FtmEngButtons类,而你的类实际在engtest目录中,会找不到。ComponentName("com.android.cci.engtest", "com.android.cci.engtest.FtmEngButtons");:第一个参数错误使用了子目录路径作为包名,虽然类名正确,但系统无法定位到目标应用的上下文。
如果后续遇到类似疑问,也可以直接查看目标应用的Manifest文件或者类文件的包声明,确保全限定类名的准确性。
内容的提问来源于stack exchange,提问作者Alan Wang
相关产品推荐
相关产品推荐

