我们有一个页面,其中包含指向电话号码的链接(a href="tel:5551234567"),当用户触摸该链接时,它会打开拨号器。用户结束通话并回击后,不再只是返回浏览器,您可以看到浏览器正在重新启动,因此页面正在重新加载。为什么会这样?
您可以在您的设备中轻松加载此 URL ( http://goo.gl/QKbrC9 ),然后点击呼叫 (555) 链接。
谢谢,
我们有一个页面,其中包含指向电话号码的链接(a href="tel:5551234567"),当用户触摸该链接时,它会打开拨号器。用户结束通话并回击后,不再只是返回浏览器,您可以看到浏览器正在重新启动,因此页面正在重新加载。为什么会这样?
您可以在您的设备中轻松加载此 URL ( http://goo.gl/QKbrC9 ),然后点击呼叫 (555) 链接。
谢谢,
这是 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;
}
}
}
但显然浏览器没有明显的理由专门处理这个问题。