Android 紧急电话号码规则

在Android系统中,为了满足紧急情况下用户能够快速拨打紧急电话,系统会将一些常见的紧急电话号码进行匹配识别。

紧急电话号码匹配规则通常包括以下几个方面:

  1. 国际通用紧急电话号码:包括112、911等。

  2. 国家或地区的紧急电话号码:Android系统会根据设备的地理位置自动匹配该地区的紧急电话号码,例如中国大陆的紧急电话号码为110和120。

  3. 自定义紧急电话号码:用户可以在设置中自定义一些特定的紧急电话号码,系统会将这些号码进行匹配。

紧急电话号码匹配规则的目的是为了方便用户在紧急情况下能够快速拨打紧急电话,提高用户的安全性和便利性。

为了防止恶意拨打紧急电话号码,系统也对拨打紧急号码进行了限制,如果一个号码被判定为紧急号码,那么除了系统应用或默认电话应用外,其他三方应用都不可以直接使用 Intent.ACTION_CALL 方式拨号呼叫。

java 复制代码
//packages/services/Telecomm/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
    public CallDisposition evaluateCall() {
... ...
        if (Intent.ACTION_CALL.equals(action)) {
//这是三方APP可以直接使用的普通拨号广播,会判断号码isPotentialEmergencyNumber以及mIsDefaultOrSystemPhoneApp
            if (isPotentialEmergencyNumber) {
                if (!mIsDefaultOrSystemPhoneApp) {
                    Log.w(this, "Cannot call potential emergency number %s with CALL Intent %s "
                            + "unless caller is system or default dialer.", number, intent);
                    launchSystemDialer(intent.getData());
                    result.disconnectCause = DisconnectCause.OUTGOING_CANCELED;
                    return result;
                } else {
                    result.callImmediately = true;
                    result.requestRedirection = false;
                }
            }
        }

国内紧急号码默认实际获取有

000 08 110 112 118 119 120 122 911 999 #911 *911

其他的也可以自定义设置。

java 复制代码
//frameworks/opt/telephony/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java

    public boolean isEmergencyNumber(String number, boolean exactMatch) {
        if (number == null) {
            return false;
        }
        number = PhoneNumberUtils.stripSeparators(number);
        if (!mEmergencyNumberListFromRadio.isEmpty()) {
            for (EmergencyNumber num : mEmergencyNumberList) {
                // According to com.android.i18n.phonenumbers.ShortNumberInfo, in
                // these countries, if extra digits are added to an emergency number,
                // it no longer connects to the emergency service.
                if (mCountryIso.equals("br") || mCountryIso.equals("cl")
                        || mCountryIso.equals("ni")) {
                    exactMatch = true;
                } else {
                    exactMatch = false || exactMatch;
                }
                if (exactMatch) {
                    if (num.getNumber().equals(number)) {
                        return true;
                    }
                } else {
//这里判断是否有和紧急号码相同开头的,如果普通号码以110之类开头会被误判
                    if (number.startsWith(num.getNumber())) {
                        return true;
                    }
                }
            }
            return false;
        } else {
            return isEmergencyNumberFromEccList(number, exactMatch)
                    || isEmergencyNumberFromDatabase(number) || isEmergencyNumberForTest(number);
        }
    }
相关推荐
松仔log12 小时前
Java中级——组合和继承
android·java·开发语言
我命由我1234515 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian23316 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_9557596216 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马16 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone16 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone16 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子20 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker20 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone20 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常