简体   繁体   English

在奥利奥注册静态广播接收器

[英]Registering Static Broadcast receiver in 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. 我正在研究一个记录来电和拨出电话的项目,但Oreo静态广播接收机(在清单中注册的广播接收机)没有被触发。 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>

There are some Broadcast Limitations in Oreo, it no longer supports to registering broadcast receivers for implicit broadcasts in app manifest. 在Oreo中有一些广播限制,它不再支持在app清单中为隐式广播注册广播接收器。 And NEW_OUTGOING_CALL is one of them, read here 而NEW_OUTGOING_CALL就是其中之一,请阅读此处

You can use PHONE_STATE action for your purpose as it hasn't categorized as a implicit broadcasts yet 您可以将PHONE_STATE操作用于您的目的,因为它尚未归类为隐式广播

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

In manifest, 在清单中,

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

Also you need to add and check READ_PHONE_STATE permission 您还需要添加并检查READ_PHONE_STATE权限

There are some Implicit Broadcast Exceptions which you can find here https://developer.android.com/guide/components/broadcast-exceptions and ACTION_NEW_OUTGOING_CALL is among them. 您可以在此处找到一些隐式广播例外https://developer.android.com/guide/components/broadcast-exceptions和其中的ACTION_NEW_OUTGOING_CALL。

My similar answer here: https://stackoverflow.com/a/51354698/1399483 我的类似答案在这里: https//stackoverflow.com/a/51354698/1399483

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM