我使用了搜索功能,并且阅读并尝试了很多示例,但我找不到解决我的问题的方法...所以,我们开始:
我只想将 Intent 发送到 1 个 BroadcastReceiver。因此我需要创建一个新的 Intent 并将其发送到 packageName 和 packageClass:
intent.setComponent(new ComponentName(packageName, className));
要查找 packageName 和 className,我使用以下代码:
String appInfo = list.get(myPlayer).activityInfo.toString();
Log.d("TAG", "app " + appInfo);
String packageName = list.get(myPlayer).activityInfo.packageName.toString();
Log.d("TAG", "package " + packageName);
String className = list.get(myPlayer).activityInfo.getClass().getName().toString();
Log.d("TAG", "class " + className);
从 logcat 我得到以下结果(例如播放音乐):
app ActivityInfo{417bd5e0 com.google.android.music.MediaButtonIntentReceiver}
package com.google.android.music
class android.content.pm.ActivityInfo
这不是很奇怪吗?出于某种原因,我期望类日志只有“MediaButtonIntentReceiver”而不是“android.content.pm.ActivityInfo”!
有人知道如何解决这个问题吗?
最佳答案
如果您正在搜索 packageName
和 className
来填充有序广播,我强烈建议您检查 ResolveInfo 的内容您可能正在使用的对象
- ResolveInfo 包含 ActivityInfo对象
- ActivityInfo 包含 ApplicationInfo对象
- ApplicationInfo 对象包含您需要的内容
所以在你的情况下,如果你需要完成 Intent 内容,我可能会建议
ResolveInfo ri = ... // get where you need
Intent intent = new Intent();
intent.setComponent(new ComponentName(
ri.activityInfo.applicationInfo.packageName,
ri.activityInfo.applicationInfo.className));
这应该适合你的情况
编辑:在某些情况下,您为特定 Intent 获取了 ResolveInfo,className
应为 null
。在这些情况下,我成功使用 ri.activityInfo.name
返回正确的 className
因为 activityInfo
适用于一个特定 Activity
关于android - 另一个 "how to find className",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105840/