¿Cómo CyanogenMod10 calcula la localización del llamador?

Edit : Changed JellyBean a cyanogenmod 10 como es probablemente una característica de cianógeno

Me di cuenta de mi teléfono en el teléfono CyanogenMod10 muestra en el registro de llamadas la ubicación (aproximada) de las personas que llaman (sólo cuando el número es un teléfono de línea terrestre no en mis contactos).

No se basa sólo en el código de país, ya que también muestra la ciudad de la persona que llama cuando se encuentra. Navegué la aplicación del paquete de contactos y los valores encontrados se obtuvo de la base de datos (en com.android.contacts.CallDetailActivity)

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

Así que pensé que estaba en la aplicación de paquete de teléfono después de realizar o recibir una llamada con éxito. Pero rápidamente me perdí en la fuente … Quiero saber dónde y (brevemente) cómo se establecen esos valores y el geocódigo resuelto.

¿Son los números de teléfono enviados a un misterioso servicio web?

¿Cyanogen tiene una tabla con todos los códigos de país y prefijos de la ciudad del mundo (lo dudo)?

¿O es ese DB descargado dependiendo del país en el que se encuentre?

Finalmente encontré cómo funcionaba esta cosa

First ContactsProvider agrega este valor al llamar a DefaultCallLogInsertionHelper.addComputedValues

mira aquí

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)); } 

Así que el código que ves

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

Está leyendo desde datos guardados

Por lo tanto, los datos reales son de PhoneNumberOfflineGeocoder que puede encontrar aquí https://github.com/CyanogenMod/android_external_libphonenumber/blob/ics/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java

Eso es algo llamado libphonenumber

https://code.google.com/p/libphonenumber/

  • ¿Qué necesito saber para conectar Cyanogenmod a teléfonos / tablets no compatibles?
  • Perfilado de android-ndk simple C / C ++ ejecutable
  • La sincronización Repo falla al inicializar el árbol de trabajo CM13
  • Repo: comando no encontrado en la secuencia de comandos automatizada bash para crear cyanogenmod
  • Tomar una foto de la cámara falla el 20% del tiempo
  • android.graphics.Picture que no está dibujado en API 14+
  • INSTALL_FAILED_UPDATE_INCOMPATIBLE cuando intento instalar compilado .apk en el dispositivo
  • Aplicación Android de telefonía que mantiene el foco en las llamadas entrantes
  • Ayudar a construir un marco android reparado
  • ¿Cómo asigno un dibujable a ImageView
  • Extraño seguimiento de la pila de bloqueo que le sucede a usuarios raros
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.