处理程序不调用

Handler not invoking

我正在从我的 app.Which 进行验证呼叫应该在配置的 5-10 秒后断开连接。

这是我的代码;

                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("tel:" + phoneNumber));
                    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                   /*It is never called up untill call got disconnected/hanged up. */
                            Log.d(TAG, "Disconnecting :");
                            disconnectCall();
                        }
                    }, 5000);

                    startActivity(callIntent);

问题是 disconnectCall() 方法在 callIntent activity 暂停之前未被调用,即用户强行断开连接 call/hanged。我需要在调用期间多次调用 disconnectCall() activity.Not 获取代码中的问题所在。

您正在调用 startActivity(callIntent)。 这意味着您正在 将控制权转移给调用方应用程序 android。 android 呼叫者应用程序现在可以在用户需要时断开呼叫。

从我的角度来看,问题出在单线程 android 服务 class 上,它不会调用处理程序或任何方法,直到之前的 activity get over.So i在处理程序 runnable 中添加了一段代码,它开始工作了。

 handler.post(callTestHandler = new Runnable() {
                        @Override
                        public void run() {
                            try {
                                //Intent callIntent = new Intent("android.intent.action.NEW_OUTGOING_CALL");
                                Intent callIntent = new Intent(Intent.ACTION_CALL);
                                callIntent.setData(Uri.parse("tel:" + phoneNumber));
                                callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        Log.d(TAG, "Disconnecting :");
                                        disconnectCall();
                                    }
                                }, 5000);
                                startActivity(callIntent);
                            } catch (Exception e) {
                                e.getMessage();
                            }
                        }
                    });

如果有人有不同answer/solution请post。

正如 daniel 提到的,一旦您开始调用 activity,您就不再处于控制之中,当您的 activity 重新回到前台时,您的应用程序主线程将只获得 CPU 时间。

挂断使用this.