赞
踩
写在前面:确切的说,这是采过的坑,记录的日志。或许,至今还在坑中,而不自知……
出现问题的起因:自定义了一个广播,并发送广播。
然后在另一个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,与前面申明的名字不一样!
这样,就可以运行了……
——然而,这个时候并没有完。签名打包时,会报错。提示在build.gradle里添加
- android {
- lint {
- baseline = file("lint-baseline.xml")
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。