【问题标题】:Handler not invoking处理程序未调用
【发布时间】:2015-09-02 20:30:52
【问题描述】:

我正在从我的应用程序进行验证呼叫。它应该在配置的 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);

问题是在 callIntent 活动暂停之前不调用 disconnectCall() 方法,即用户强行断开呼叫/挂断。我需要在通话活动期间调用 disconnectCall()。没有找到代码中的问题所在。

【问题讨论】:

    标签: android handler


    【解决方案1】:

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

    【讨论】:

    • 我遇到了问题。单线程服务类的问题。让我更新一下。
    【解决方案2】:

    正如 daniel 所提到的,一旦您开始调用活动,您将不再处于控制之中,并且您的应用程序主线程只会在您的活动回到前台时获得 CPU 时间。

    挂断使用this

    【讨论】:

    • 谢谢。我们已经编写了挂断电话代码。是的,这是因为主线程。
    【解决方案3】:

    从我的角度来看,问题出在单线程 android 服务类上,它在之前的活动结束之前不会调用处理程序或任何方法。所以我在处理程序 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();
                                }
                            }
                        });
    

    如果有人有不同的答案/解决方案,请发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2016-06-25
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多