0

我们有一个页面,其中包含指向电话号码的链接(a href="tel:5551234567"),当用户触摸该链接时,它会打开拨号器。用户结束通话并回击后,不再只是返回浏览器,您可以看到浏览器正在重新启动,因此页面正在重新加载。为什么会这样?

您可以在您的设备中轻松加载此 URL ( http://goo.gl/QKbrC9 ),然后点击呼叫 (555) 链接。

谢谢,

4

1 回答 1

1

这是 Android 的默认行为。

通话进行时,您已移出浏览器应用程序并进入新应用程序。拨号器应用程序不知道浏览器,因此当按下返回时,Android 操作系统会接管并启动浏览器应用程序。这将启动一个新的浏览器,而如果拨号程序知道该浏览器,它可以将其标记为重新排序到前面。

话虽这么说,有可能让一个应用程序用类似的东西来对抗这个:

    private class EndCallListener extends PhoneStateListener {

    private final String LOG_TAG = "EndCallListener";

    private boolean isPhoneCalling = false;

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (TelephonyManager.CALL_STATE_RINGING == state) {
            Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
            // finish();
        }
        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // wait for phone to go offhook (probably set a boolean flag) so
            // you know your app initiated the call.
            Log.i(LOG_TAG, "OFFHOOK");
            isPhoneCalling = true;
        }
        if (TelephonyManager.CALL_STATE_IDLE == state) {

                // run when class initial and phone call ended,
                // need detect flag from CALL_STATE_OFFHOOK
                Log.i(LOG_TAG, "IDLE");

                if (isPhoneCalling) {

                    Log.i(LOG_TAG, "restart app");

                    // restart app
                    Intent i = getBaseContext().getPackageManager()
                            .getLaunchIntentForPackage(
                                    getBaseContext().getPackageName());
                    // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                    startActivity(i);

                    isPhoneCalling = false;
                }


        }
    }

但显然浏览器没有明显的理由专门处理这个问题。

于 2013-09-25T22:59:42.630 回答