从Android中的另一个广播接收器注册广播接收器 [英] Register Broadcast Receiver from another Broadcast Receiver in android

查看:207
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆