2012-11-24 57 views
4

編輯:改變豆形軟糖到的CyanogenMod 10,因爲它可能是一個氰功能CyanogenMod10如何計算出來電者的位置?

我發現我的手機下CyanogenMod10手機顯示在通話記錄來電者(僅當數量爲地面線路電話的(近似)的位置不在我的聯繫人中)。

它不僅僅依賴於國家代碼,因爲它也顯示找到調用者的城市。我瀏覽聯繫人封裝應用,發現價值是獲取從數據庫(在com.android.contacts.CallDetailActivity)

final String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX); 
final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX); 

所以,我雖然是在手機應用程序包成功後,撥打或接聽的電話。但是我很快就失去了信心......我想知道這些值是如何設置的以及地理編碼是如何解析的。

電話號碼是否發送到神祕的網絡服務?

氰諾有一個表與所有國家代碼和世界城市前綴(我懷疑它)?

或者是根據您所在的國家/地區下載的數據庫?

+0

MIUI全集過這樣的事情在果凍豆之前很久,但他們沒有解決到城市。 –

+0

其實我正在使用cyanogenmod10我想知道是否它不是一個氰化物功能:/我沒有谷歌手機來比較,也許我應該編輯我的問題... – MiniScalope

+0

也許它的氰化物功能。如果電話服務或聯繫人應用程序連接到任何服務器以獲取位置詳細信息,請使用[this](https://play.google.com/store/apps/details?id=com.eolwral.osmonitor)等應用程序。 –

回答

2

最後,我發現這件事的工作

首先 ContactsProvider調用DefaultCallLogInsertionHelper.addComputedValues

時如何添加該值

看到這裏

https://github.com/CyanogenMod/android_packages_providers_ContactsProvider/blob/ics/src/com/android/providers/contacts/DefaultCallLogInsertionHelper.java#L59

@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/

+0

太棒了!每個人似乎都在關注隱私,但沒有人發現這種功能可能具有侵擾性。謝謝 :) – MiniScalope