android - 另一个 "how to find className"

标签 android android-intent broadcastreceiver package classname

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

我只想将 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”!

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

最佳答案

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

所以在你的情况下,如果你需要完成 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/

相关文章:

android - 应用程序关闭时运行警报

java - 调用 registerBroadcast 时出现 NullPointerException

android - 无法通过 Ubuntu 12.04 上的 Fastboot 解锁 Android bootloader - 等待设备

Android:为什么点击 backstack 的 Intent 通知会破坏父 MainActivity?

java - Android 在线流媒体应用程序不应在屏幕锁定和解锁时关闭

android - 在另一个应用程序 Android 中启动一个应用程序

android - 收到 SMS 时发送多部分 SMS 并检查是否送达(导致 receive call notallowedexception)

android - 使用 build apk 命令构建的 Flutter 应用程序无法运行特定于平台的代码

java - android 光标操作顺序

java - 是否可以只在设计环境中执行代码(android)