编辑:将JellyBean更改为cyanogenmod 10,因为它可能是一种氰基特征
我注意到CyanogenMod10手机下的手机在通话记录中显示了来电者的(近似)位置(仅当号码是我的联系人中没有的固定电话时).
它不仅仅依赖于国家/地区代码,因为它还会在找到时显示调用者的城市.我浏览了联系人包应用程序,发现从数据库中获取了值(在com.android.contacts.CallDetailActivity中)
final String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
所以我虽然在成功拨打或接听电话后是在电话套餐应用程序中.但我很快就迷失在源头……我想知道在哪里和(简要地)如何设置这些值并解决地理编码问题.
电话号码是否发送到神秘的网络服务?
Cyanogen是否有一张包含世界上所有国家代码和城市前缀的表格(我对此表示怀疑)?
或者根据您所在的国家/地区下载该数据库?
解决方法:
最后我发现这件事是如何运作的
第一
ContactsProvider在调用DefaultCallLogInsertionHelper.addComputedValues时添加此值
看这里
@Override
public void addComputedValues(ContentValues values) {
// Insert the current country code, so we kNow the country the number belongs to.
String countryIso = getCurrentCountryIso();
values.put(Calls.COUNTRY_ISO, countryIso);
// Insert the geocoded location, so that we do not need to compute it on the fly.
values.put(Calls.GEOCODED_LOCATION,
getGeocodedLocationFor(values.getAsstring(Calls.NUMBER), countryIso));
}
所以你看到的代码
final String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
实际上是从保存的数据中读取
因此,真实数据来自PhoneNumberOfflineGeocoder,您可以在此处找到
https://github.com/CyanogenMod/android_external_libphonenumber/blob/ics/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
这就是libphonenumber
https://code.google.com/p/libphonenumber/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。