【问题标题】:receiver 'class' or 'interface' expected error in manifest清单中的接收器“类”或“接口”预期错误
【发布时间】:2018-08-13 02:11:35
【问题描述】:

我编写了一个扩展 BroadcastReceiver 的类,并在清单中声明了一个 Receiver。

有一条红色下划线表示classinterface 预期”。

我的班级定义如下:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: TEST");
    }
}

这就是我在清单中声明接收者的方式:

<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

我浏览了每个有类似问题的 SO 链接,并尝试/检查了以下所有内容,但均无效:

  1. 我检查以确保我在 BroadcastReceiver 类中有所需的方法
  2. 我检查以确保课堂上没有不匹配的括号,并过早关闭它
  3. 在清单中声明类时,我尝试以多种方式写出类的名称:
android:name=".MyBroadcastReceiver"
android:name="com.claire.myapp.MyBroadcastReceiver"
android:name="MyBroadcastReceiver"

有没有人知道为什么这些都没有在清单中被识别?或者为什么 Android Studio 确信 MyBroadcastReceiver 不是一个类?

非常感谢!

【问题讨论】:

  • MyBroadcastReceiver 是内部类吗?
  • 它是一个外部类,除了onRecieve方法之外没有其他任何东西
  • 是否在 标签内?
  • 是的, 标签内,我也在 标签外尝试过,但仍然在 内,但都没有工作。
  • 发布您的完整清单文件,发布图像屏幕截图,显示您在 src 文件夹中添加 MyBroadcastReceiver.java 的路径。

标签: java android broadcastreceiver receiver


【解决方案1】:

使用完全限定的接收器类名,即带有包名

<receiver android:name="<packagename>.MyBroadcastReceiver"  android:exported="true">
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>

【讨论】:

  • 我已将完整的包名写给接收者,但我仍然收到同样的错误。这是结果的截图:pasteboard.co/HaypOnL.png
【解决方案2】:

你能确定你正在开发的包是开发包,而不是测试包。 只需检查包名称,也许清单无法在您的包中找到该类。

【讨论】:

  • 是的,我可以确认我在开发包中,而不是 (Test) 或 (androidTest) 的包。我也确认我写的包名是正确的
  • 能否分享完整的清单文件和屏幕截图。
  • 这里是完整清单文件的截图:pasteboard.co/HauqAO4.png
  • 找到了 .. 只需将广播接收器放入应用程序标签中
  • 应用程序>
猜你喜欢
  • 2016-04-09
  • 1970-01-01
  • 2015-06-15
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多