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

标签 java android broadcastreceiver

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

我的设备是小米8

这是我的代码:

public class CallBarring extends BroadcastReceiver {

    private CustomDialog dialog;
    private TelephonyManager telephonyManager;
    private PhoneStateListener listener;
    private Context context;
    private Button btnEndCall;
    private TextView incomingNumberName;
    private List<String> data;

    final NumberInfo numberInfo = new NumberInfo();
    Retrofit retrofit = NetworkClient.getRetrofitClient();
    NumberAPI numberAPI = retrofit.create(NumberAPI.class);
    @Override
    public void onReceive(Context context, Intent intent) {

        if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
            return;

        else {
            this.context = context;
            if(dialog == null){
                dialog = new CustomDialog(context);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
                }else{
                    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
                }
                dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
                dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
                dialog.show();
            }
            // Fetch the number of incoming call
            telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            listener = new PhoneStateListener() {
                @Override
                public void onCallStateChanged(int state, String incomingNumber) {
                    String stateString = "N/A";
                    switch (state) {
                        case TelephonyManager.CALL_STATE_IDLE:
                            stateString = "Idle";
                            dialog.dismiss();
                            break;
                        case TelephonyManager.CALL_STATE_OFFHOOK:
                            stateString = "Off Hook";
                            dialog.dismiss();
                            break;
                        case TelephonyManager.CALL_STATE_RINGING:
                            stateString = "Ringing";
                            dialog.show();
                            break;
                    }
                }
            };

            telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
            telephonyManager.listen(new PhoneStateListener(){
                @Override
                public void onCallStateChanged(int state, String incomingNumber) {
                    super.onCallStateChanged(state, incomingNumber);
                    System.out.println("incomingNumber : "+incomingNumber);
                    fetchUserInfo(incomingNumber);


                }
            },PhoneStateListener.LISTEN_CALL_STATE);

        }
    }

最佳答案

许多 Android 设备都有电源管理器和剂量模式概念。因此,当应用程序处于后台时,后台功能会停止。

您可以使用前台服务注册BroadcastReceiver来监听PHONE_STATE。

关于java - 关闭应用程序时广播接收器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58486282/

相关文章:

Android Sleep API - 未获取数据

android - 将数据从 BroadcastReceiver 类传递到 Android Activity

java - 在 URL 对象中设置自定义 HTTP 请求 header 不起作用

android - 如何在 ListView 适配器类中获取行项目位置号

java - 是否可以通过将 "new Object()"转换为泛型类来实例化泛型类?

android - gradle项目中如何设置SDK目录

android - 如何从 Android 应用程序安装 .cap 小程序?

android - 如何让 Android BroadcastReceiver 与 AlarmManager 配合使用?

java - 获取特殊日期 Java 的(星期几)?

java - 使用Optional.of()方法进行方法链接是个好主意吗?