当前位置:   article > 正文

java.lang.Class<...> has no zero argument constructor。registerReceiver(myBroadcastReceiver, filter)。_java.lang.class has

java.lang.class has no zero argument construct

写在前面:确切的说,这是采过的坑,记录的日志。或许,至今还在坑中,而不自知……

出现问题的起因:自定义了一个广播,并发送广播。

然后在另一个Activity中接收广播。

在注册广播时:registerReceiver(myBroadcastReceiver, filter);黄标报错。

就像这样:

提示:

`myBroadcastReceiver` is missing `RECEIVER_EXPORTED` or `RECEIVER_NOT_EXPORTED` flag for unprotected \ broadcasts registered for BROADCAST_ACTION

——必须把这个黄标解决掉!!!=非著名.又菜.又爱玩.业余程序员

我听说这个黄标是因为在manifest中没有注册的原因引起的。

于是跑到里面去注册,一开始,我是写成这样:

很明显,这有错误。我很快意识到,这个必须输入一个完整路径,也许能解决这个问题。

但我点了很久,于是,换了个方式报错:

直到我在Fragment中,将

  1. private class MyBroadcastReceiver extends BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. //My Code
  5. }
  6. }

改成:

  1. public class MyBroadcastReceiver extends BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. //My Code
  5. }
  6. }

终于可以点出来了:

随后,运行——接着报错:

java.lang.Class<...> has no zero argument constructor

于是,我又添加了零参构造函数:

  1. public class MyBroadcastReceiver extends BroadcastReceiver {
  2. private MyBroadcastReceiver() {
  3. }
  4. @Override
  5. public void onReceive(Context context, Intent intent) {
  6. //My Code
  7. }
  8. }

这里写成public和private我没有明显的感觉到有啥区别。因为我有多个Activity需要接收这个广播(在同一个地方发送,在n个地方接收),所以我选择了private。

随后,运行——接着报错、闪退:

java.lang.Class<...> has no zero argument constructor

一次偶然的机会,我在申明处和接收处写了不同的action,发现不报错了。于是,我写成了这样(至于为什么,还没有搞清,只是可以运行了):

但是在发送、接收处的action都写成

BROADCAST_ACTION

也就是,少了一部少(或者说不一样,一样就会报错)。

最后,解决黄标报错,是在new IntentFilter时,改为全局变量。(至于为什么,我也没有搞清。而且前面不能写private,写完又黄标报错……)

注意,这个action,与前面申明的名字不一样!

这样,就可以运行了……

——然而,这个时候并没有完。签名打包时,会报错。提示在build.gradle里添加

  1. android {
  2. lint {
  3. baseline = file("lint-baseline.xml")
  4. }
  5. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/630771
推荐阅读
相关标签
  

闽ICP备14008679号