在Oreo中注册静态广播接收器 [英] Registering Static Broadcast receiver in Oreo

查看:114
本文介绍了在Oreo中注册静态广播接收器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在一个项目,该项目记录来话和来话,
,但是使用Oreo静态广播接收器(清单中已注册的广播接收器)不会被触发。
如果我在上下文中注册,则一旦应用被杀死,广播将不会触发。

I'm Working on a project which records incoming calls and outgoing calls, but with Oreo static broadcast receivers (Broadcast receivers which are registered in the manifest) are not getting triggered. if I register with context, the broadcast will not be triggered once app gets killed.

即使应用已关闭,我也希望广播接收器能够正常工作。

I want the broadcast receiver to work even if app is closed.

有没有可能实现此奥利奥的方法?或任何其他替代方法来实现这一目标?
任何帮助将不胜感激。

is there any possible way to achieve this Oreo? or any other alternative approach to achieve this? any help will be appreciated.

我正在清单中注册如下代码

I'm registering in manifest as below code

<application ...
  ..
    <receiver
            android:name=".PhoneCallReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>
</application>


推荐答案

奥利奥(Oreo)有一些广播限制,它不再存在支持为应用清单中的隐式广播注册广播接收器。而NEW_OUTGOING_CALL就是其中之一,请在此处

There are some Broadcast Limitations in Oreo, it no longer supports to registering broadcast receivers for implicit broadcasts in app manifest. And NEW_OUTGOING_CALL is one of them, read here

您可以使用PHONE_STATE操作,因为它尚未被归类为隐式广播

You can use PHONE_STATE action for your purpose as it hasn't categorized as a implicit broadcasts yet

public class StateReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
   // will trigger at incoming/outgoing call

    try {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        String outgoingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    }
    catch (Exception e){
        e.printStackTrace();
    }
  }
}

在清单中,

        <receiver android:name=".StateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        </receiver>

另外,您需要添加并检查READ_PHONE_STATE权限

Also you need to add and check READ_PHONE_STATE permission

这篇关于在Oreo中注册静态广播接收器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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