2

我已经使用了搜索功能,并且我已经阅读并尝试了很多示例,但是我找不到我的问题的解决方案......所以,我们开始吧:

我只想将 Intents 发送到 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”!!!

有人知道如何解决这个问题吗?

4

3 回答 3

3

如果您正在搜索packageNameclassName填充有序广播,我真的建议您检查您可能正在使用的ResolveInfo对象的内容

所以在你的情况下,如果你需要完成意图的内容,我可能会建议

    ResolveInfo ri = ... // get where you need
    Intent intent = new Intent();
    intent.setComponent(new ComponentName(
        ri.activityInfo.applicationInfo.packageName,
        ri.activityInfo.applicationInfo.className)); 

这应该适合你的情况

编辑:在某些情况下,您为特定意图获得 ResolveInfo,className应该是null. 在这些情况下,我成功使用ri.activityInfo.namewhich 返回正确className,因为activityInfo它适用于一项特定活动

于 2013-01-01T10:43:05.583 回答
1

简单地说:getClass()没有做你期望它做的事情。
然而,使用你所拥有的,你可以得到你想要的东西:

String appInfo = list.get(myPlayer).activityInfo.toString();
String className = appInfo.substring(appInfo.lastIndexOf(".") + 1, appInfo.length() - 1);
Log.d("TAG", "class " + className);

请注意,这packageName是 ActivityInfo 的一个字段,而不是一个方法。虽然getClass()是一种方法,但它是一种方法Object,来自它的文档:

返回表示此对象类的唯一 Class 实例。

因此,您要询问 的名称activityInfo,即(如您所知)ActivityInfo

于 2012-12-31T20:42:29.797 回答
0

这一点都不奇怪。这里:

String className = list.get(myPlayer).activityInfo.getClass().getName().toString()

你得到了ActivityInfo对象的类。我不确定你到底想做什么,但这就是为什么你看到你所看到的。

于 2012-12-31T20:37:17.730 回答