处理程序不调用

时间:2015-09-02 12:07:25

标签: android handler

我正在从我的应用程序进行验证调用。在配置完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活动被挂起,即用户强行断开call / hanged up。我需要在调用活动期间调用 disconnectCall ()。不会在代码中找到问题所在。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

正如daniel所提到的,一旦你开始调用活动,你就不再受控制了,你的应用程序主线程只会在你的活动回到前台时获得CPU时间。

挂断使用this

答案 2 :(得分:1)

从我的角度来看,问题在于单线程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();
                            }
                        }
                    });

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