Java 关闭应用程序时广播接收器不工作

Java 关闭应用程序时广播接收器不工作,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,当手机的来电在屏幕上弹出时。应用程序打开时正在运行。但是,当我完全关闭应用程序时,即使有语音通话,手机也不会显示弹出窗口。应用程序关闭后,广播接收器不工作 我的设备是小米Mi8 这是我的代码: public类CallBarring扩展了BroadcastReceiver{ 自定义对话框; 专用电话管理器电话管理器; 私人电话监听; 私人语境; 专用按钮btnEndCall; 私有文本视图incomingNumberName; 私人名单数据; final NumberInfo NumberInfo

当手机的来电在屏幕上弹出时。应用程序打开时正在运行。但是,当我完全关闭应用程序时,即使有语音通话,手机也不会显示弹出窗口。应用程序关闭后,广播接收器不工作

我的设备是小米Mi8

这是我的代码:

public类CallBarring扩展了BroadcastReceiver{
自定义对话框;
专用电话管理器电话管理器;
私人电话监听;
私人语境;
专用按钮btnEndCall;
私有文本视图incomingNumberName;
私人名单数据;
final NumberInfo NumberInfo=新NumberInfo();
改型改型=NetworkClient.getRefundationClient();
numberRapi numberRapi=改装.create(numberRapi.class);
@凌驾
公共void onReceive(上下文、意图){
如果(!intent.getAction().equals(“android.intent.action.PHONE_STATE”))
返回;
否则{
this.context=上下文;
如果(对话框==null){
dialog=新建自定义对话框(上下文);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE\u APPLICATION\u OVERLAY);
}否则{
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE\系统\警报);
}
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG\u NOT\u TOUCH\u model);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG)保持屏幕打开|
WindowManager.LayoutParams.FLAG\u discover\u KEYGUARD|
WindowManager.LayoutParams.FLAG(锁定时显示);
dialog.show();
}
//获取传入呼叫的号码
telephonyManager=(telephonyManager)context.getSystemService(context.TELEPHONY_服务);
listener=新的PhoneStateListener(){
@凌驾
public void onCallStateChanged(int状态,字符串incomingNumber){
String stateString=“不适用”;
开关(状态){
case TelephonyManager.CALL_STATE_IDLE:
stateString=“空闲”;
dialog.dismise();
打破
case TelephonyManager.CALL_STATE_OFFHOOK:
stateString=“摘机”;
dialog.dismise();
打破
case TelephonyManager.CALL_STATE_响铃:
stateString=“振铃”;
dialog.show();
打破
}
}
};
listen(listener,PhoneStateListener.listen\u CALL\u STATE);
listen(新的PhoneStateListener(){
@凌驾
public void onCallStateChanged(int状态,字符串incomingNumber){
super.onCallStateChanged(状态、收入编号);
System.out.println(“收入编号:+收入编号”);
fetchUserInfo(incomingNumber);
}
},PhoneStateListener.LISTEN\u CALL\u STATE);
}
}

许多android设备都有电源管理器和剂量模式的概念。所以当应用程序在后台时,后台功能就会停止


您可以使用前台服务注册您的广播接收器以收听手机状态。

您似乎正在某个活动中注册您的广播接收器(我假设)。这意味着您的接收器仅在该活动处于活动状态时工作。但当该活动停止时,接收器将被取消注册,因此不会收听任何内容

你需要在清单中注册接收者。这样,即使你的应用程序关闭,接收者也会收到
PHONE\u STATE
事件并触发你的逻辑

<receiver
    android:name=".CallBarring"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>


添加运行此应用程序的设备详细信息。当应用程序被终止时,您是否找到了解决方案?我面临的问题与此相同。此接收器不工作,但android文档提到,即使在应用程序被终止后,此方法仍能工作。您的意思是在前台服务中注册一个BroadcastReceiver?是的,在前台服务中。