从Android中的另一个广播接收器注册广播接收器 [英] Register Broadcast Receiver from another Broadcast Receiver in android
问题描述
当前,我具有用于监听呼叫状态事件的广播接收器。我已经在 AndroidManifest.xml
中注册了广播接收器,如下所示。
Currently I have Broadcast Receiver for listening call states events. I have registered Broadcast Receiver in AndroidManifest.xml
as shown below.
<receiver android:name=".api.PhoneCallReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
当应用程序启动时,此广播接收器已注册用于监听呼叫状态事件,并根据 CALL_STATE
我正在管理我的应用程序。
When Application launches this broadcast receiver is registered for listening call states events and according to CALL_STATE
i am managing my application.
在手机重启之前一切正常。
电话重启后,此广播接收器停止工作。我知道我必须注册接收器才能侦听系统的 BOOT_COMPLETED
事件。
It is working fine until phone restarts.
After phone restart this broadcast receiver stops working. I know I have to register receiver for listening BOOT_COMPLETED
event of system.
我所做的事情如下所示:
What i have done is like shown below:
<receiver android:name=".api.PhoneCallReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
我还获得了 BOOT_COMPLETED
的许可
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
,但不知何故它不起作用。我正在考虑制作仅监听 BOOT_COMPLETED
事件的新广播接收器,但问题是
but somehow it is not working. I am thinking of making new Broadcast Receiver that listens for BOOT_COMPLETED
event only but issue is that
所以我的问题是
如何从另一个广播接收器注册广播接收器
How can i register Broadcast Receiver from another Broadcast Receiver
我是否必须将现有广播接收器的代码移到服务中才能从Boot Receiver启动服务?
Do i have to move my existing broadcast receiver's code to service so i can start service from Boot Receiver?
任何帮助将不胜感激。 / p>
Any help will be appreciated.
推荐答案
欢迎其他答案。
我已经解决了创建新的广播接收器,并在电话重启时调用该广播接收器的 onReceive()
方法,然后我已经动态注册了 READ_PHONE_STATE
广播接收器,它也是清单注册的接收器。
I have solved it by creating new Broadcast receiver and onReceive()
method of that Broadcast receiver will be called when phone restarts then i have dynamically register READ_PHONE_STATE
broadcast receiver that is also manifest registered receiver.
下面是代码:
AndroidManifest.xml :
<receiver android:name=".api.ServiceStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
BroadcastReceiver:
public class ServiceStarter extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
PhoneCallReceiver receiver = new PhoneCallReceiver();
context.getApplicationContext().registerReceiver(receiver, filter);
}
}
您必须使用以下应用程序上下文注册接收者:
You have to register receiver using Application context like below:
context.getApplicationContext().registerReceiver(receiver, filter);
而不是
context.registerReceiver(receiver, filter);
否则,您将收到以下异常:
Otherwise you will get following exception:
java.lang.RuntimeException:无法启动接收器
com.ecosmob.contactpro.api.ServiceStarter:
android.content.ReceiverCallNotAllowedException:BroadcastReceiver
组件不是允许注册接收意向
java.lang.RuntimeException: Unable to start receiver com.ecosmob.contactpro.api.ServiceStarter: android.content.ReceiverCallNotAllowedException: BroadcastReceiver components are not allowed to register to receive intents
我希望它可以帮助其他人!
I hope it helps others!
这篇关于从Android中的另一个广播接收器注册广播接收器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!