马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在Android系统中,为了满足紧急情况下用户能够快速拨打紧急电话,系统会将一些常见的紧急电话号码进行匹配辨认。
紧急电话号码匹配规则通常包括以下几个方面:
1. 国际通用紧急电话号码:包括112、911等。
2. 国家或地区的紧急电话号码:Android系统会根据设备的地理位置自动匹配该地区的紧急电话号码,比方中国大陆的紧急电话号码为110和120。
3. 自界说紧急电话号码:用户可以在设置中自界说一些特定的紧急电话号码,系统会将这些号码进行匹配。
紧急电话号码匹配规则的目的是为了方便用户在紧急情况下能够快速拨打紧急电话,进步用户的安全性和便利性。
为了防止恶意拨打紧急电话号码,系统也对拨打紧急号码进行了限定,如果一个号码被判定为紧急号码,那么除了系统应用或默认电话应用外,其他三方应用都不可以直接使用 Intent.ACTION_CALL 方式拨号呼唤。
- //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
其他的也可以自界说设置。
- //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);
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |