从android中的另一个广播接收器注册广播接收器

前端之家收集整理的这篇文章主要介绍了从android中的另一个广播接收器注册广播接收器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目前我有用于收听呼叫状态事件的广播接收器.我在AndroidManifest.xml中注册了Broadcast Receiver,如下所示.

当应用程序启动时,此广播接收器已注册为侦听呼叫状态事件,并且根据CALL_STATE我正在管理我的应用程序.

手机重启后工作正常.
手机重启后,此广播接收器停止工作.我知道我必须注册接收器以监听系统的BOOT_COMPLETED事件.

我所做的如下所示:

我还获得了获取BOOT_COMPLETED系统事件的权限.

但不知怎的,它不起作用.我正在考虑制作只接听BOOT_COMPLETED事件的新广播接收器,但问题就在于此

所以我的问题是,当有来电时我怎么能启动这个电话呼叫监听器广播接收器?

如何从另一个广播接收器注册广播接收器

我是否必须将现有的广播接收器代码移至服务中,以便我可以从Boot Receiver启动服务?

任何帮助将不胜感激.

最佳答案
欢迎任何其他答案.

我已经通过创建新的广播接收器和onReceive()方法解决了这个问题,当手机重新启动时,我将动态注册READ_PHONE_STATE广播接收器,也就是显示注册的接收器.

以下是代码

AndroidManifest.xml中:

广播接收器:

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);
    }
}

您必须使用以下应用程序上下文注册接收器:

context.getApplicationContext().registerReceiver(receiver,filter);

代替

context.registerReceiver(receiver,filter);

否则你将得到以下异常:

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

我希望它能帮助别人!

原文链接:https://www.f2er.com/android/430010.html

猜你在找的Android相关文章