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

Jay*_*nth 5 android broadcastreceiver android-8.0-oreo android-8.1-oreo

我正在研究一个记录来电和拨出电话的项目,但Oreo静态广播接收机(在清单中注册的广播接收机)没有被触发.如果我使用上下文注册,一旦应用程序被杀,广播将不会被触发.

即使应用程序关闭,我希望广播接收器工作.

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

我在清单中注册如下代码

<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>
Run Code Online (Sandbox Code Playgroud)

Hes*_*epa 7

在Oreo中有一些广播限制,它不再支持在app清单中为隐式广播注册广播接收器.而NEW_OUTGOING_CALL就是其中之一,请阅读此处

您可以将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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在清单中,

        <receiver android:name=".StateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

您还需要添加并检查READ_PHONE_STATE权限