我碰到这个问题的时候去搜,找到的是因为安卓版本过高,系统比较严格,因此发送广播的时候需要多点步骤,但是在看书的过程中,又发现好像这个还分动态注册和静态注册。其实差别只是多一行少一行的事,下面分别说说,PS.我的avd是Android 28。
静态注册
如果是在AndroidManifest.xml中注册的接收器,在发送的时候需要多调用一个setComponent()
方法,其中第一个参数是包名,第二个参数是接收器的类名。
...
Intent intent=new Intent("com.example.k.androidpractice_1.MY_BROADCAST");
intent.setComponent(new ComponentName("com.example.k.androidpractice_1","com.example.k.androidpractice_1.MyBootReceiver"));
sendBroadcast(intent);
...
动态注册
在代码中动态注册的接收器,就不需要调用这个方法了,直接send Intent即可。
Intent intent=new Intent("com.example.k.androidpractice_1.FORCE_LOGOUT");
sendBroadcast(intent);
目前我发现是这样,也只是发现解决方法,不太知道其中的原理之类的,有大佬乐意的话可以指点一二也感激不尽。