写在前面:确切的说,这是采过的坑,记录的日志。或许,至今还在坑中,而不自知……
出现问题的起因:自定义了一个广播,并发送广播。
然后在另一个Activity中接收广播。
在注册广播时:registerReceiver(myBroadcastReceiver, filter);黄标报错。
就像这样:
提示:
`myBroadcastReceiver` is missing `RECEIVER_EXPORTED` or `RECEIVER_NOT_EXPORTED` flag for unprotected \ broadcasts registered for BROADCAST_ACTION
——必须把这个黄标解决掉!!!=非著名.又菜.又爱玩.业余程序员
我听说这个黄标是因为在manifest中没有注册的原因引起的。
于是跑到里面去注册,一开始,我是写成这样:
很明显,这有错误。我很快意识到,这个必须输入一个完整路径,也许能解决这个问题。
但我点了很久,于是,换了个方式报错:
直到我在Fragment中,将
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//My Code
}
}
改成:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//My Code
}
}
终于可以点出来了:
随后,运行——接着报错:
java.lang.Class<...> has no zero argument constructor
于是,我又添加了零参构造函数:
public class MyBroadcastReceiver extends BroadcastReceiver {
private MyBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
//My Code
}
}
这里写成public和private我没有明显的感觉到有啥区别。因为我有多个Activity需要接收这个广播(在同一个地方发送,在n个地方接收),所以我选择了private。
随后,运行——接着报错、闪退:
java.lang.Class<...> has no zero argument constructor
一次偶然的机会,我在申明处和接收处写了不同的action,发现不报错了。于是,我写成了这样(至于为什么,还没有搞清,只是可以运行了):
但是在发送、接收处的action都写成
BROADCAST_ACTION
也就是,少了一部少(或者说不一样,一样就会报错)。
最后,解决黄标报错,是在new IntentFilter时,改为全局变量。(至于为什么,我也没有搞清。而且前面不能写private,写完又黄标报错……)
注意,这个action,与前面申明的名字不一样!
这样,就可以运行了……文章来源:https://www.toymoban.com/news/detail-832429.html
——然而,这个时候并没有完。签名打包时,会报错。提示在build.gradle里添加文章来源地址https://www.toymoban.com/news/detail-832429.html
android {
lint {
baseline = file("lint-baseline.xml")
}
}
到了这里,关于java.lang.Class<...> has no zero argument constructor。registerReceiver(myBroadcastReceiver, filter)。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!