¿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).
- CyanogenMod en el emulador de Android - ¿es posible?
- Sincronización de errores con cyanogenmod repo
- GCC cree que estoy ejecutando x86
- ¿Por qué se introduce una API en Honeycomb trabajando en Gingerbread?
- Compile el lanzador de código abierto de Android en Android Studio
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?
- CyanogenMod o AOSP: Compilar un solo proyecto
- CyanogenMod: traducir un proyecto
- Permisos insuficientes para el dispositivo en Android Studio Workspace que se ejecuta en openSUSE 13.2
- Servicios de Google Play: ¿Cómo manejar dispositivos que no tienen Google Play?
- Cómo construir la aplicación del sistema CM sin odex?
- Cómo configurar el directorio temporal al crear cyanogenmod
- Conexión Bluetooth de Android Seguro Inseguro
- ¿Es posible obtener el perfil seleccionado actualmente del teléfono?
Finalmente encontré cómo funcionaba esta cosa
First ContactsProvider agrega este valor al llamar a DefaultCallLogInsertionHelper.addComputedValues
mira aquí
@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