¿Alto consumo de energía? ¿Poca precisión de posicionamiento? Cómo optimizar el posicionamiento nativo de Android

 

Recientemente, el Foro de desarrolladores de Huawei recibió una pregunta de un pequeño socio:

Mi aplicación necesita llamar al servicio de ubicación GPS. Se activaron todos los permisos requeridos por la aplicación y se utilizan redes Wi-Fi y 4G. La configuración de administración de red y administración del consumo de energía del teléfono móvil también está abierta a la aplicación, pero use Android estándar La ubicación GPS y los datos de velocidad llamados por la interfaz aún son muy inexactos, ¿cómo solucionarlo? Enlace de pregunta

1

 

Análisis de las ventajas y desventajas del posicionamiento nativo de Android

El desarrollador que hizo la pregunta invocó la interfaz nativa de Android en la aplicación para el posicionamiento.

El posicionamiento nativo de Android proporciona dos modos: posicionamiento GPS y posicionamiento de red. El posicionamiento GPS admite el posicionamiento fuera de línea. Se basa en satélites y se puede posicionar sin una red. Tiene alta precisión pero alto consumo de energía. Debido a que el módulo de posicionamiento GPS en el dispositivo móvil debe estar encendido, consumirá más energía; recopilación de satélites y el cálculo de datos lleva mucho tiempo. Por lo general, conduce a un posicionamiento inicial lento; y debido a la necesidad de recibir señales de satélite, se ve fácilmente afectado por el entorno y la ubicación geográfica, es decir, la recepción de la señal se ve fácilmente afectada por el clima, los edificios y Otras obstrucciones. La señal en túneles, áreas montañosas y otros lugares suele ser deficiente y elevada. Los edificios, los edificios densos, los techos y las paredes afectarán las señales de recepción del GPS y causarán un posicionamiento inexacto.

Posicionamiento de red (posicionamiento de red), la velocidad de posicionamiento es rápida, siempre que se cumplan los requisitos de la red o la estación base, el posicionamiento instantáneo se puede lograr en cualquier lugar y en interiores también se satisface; bajo consumo de energía, bajo consumo de energía; pero pobre precisión de posicionamiento, fácil de interferir, la calidad de posicionamiento es deficiente en lugares donde el número de estaciones base o WiFi es pequeño y la señal es débil, o no se puede lograr el posicionamiento; el posicionamiento debe estar conectado a la red.

Los dos modos de posicionamiento anteriores tienen sus propias ventajas y desventajas. El desarrollador que hizo la pregunta invocó la interfaz nativa de Android en la aplicación para el posicionamiento. La precisión de posicionamiento GPS tradicional es de solo 3-7 metros, mientras que el ancho de un solo carril del área urbana principal Las carreteras en mi país son generalmente de 3,75 metros, lo que significa que el GPS no puede lograr un posicionamiento a nivel de línea de carril. Especialmente en carreteras urbanas o cañones, la precisión se reducirá aún más.

Entonces, además de llamar a la interfaz nativa para obtener la ubicación, ¿hay alguna otra solución?

Servicio de ubicación de Huawei

El kit de ubicación de Huawei utiliza un modo de posicionamiento híbrido multicanal, como el sistema global de navegación por satélite (GNSS), Wi-Fi y estaciones base para el posicionamiento. La aplicación puede obtener información de ubicación del usuario de forma rápida y precisa.

Las principales capacidades que brindan actualmente los servicios de ubicación de Huawei incluyen tres partes: posicionamiento integrado, reconocimiento de actividad y geofencing. Los desarrolladores pueden llamar a las capacidades correspondientes según sus necesidades.

Entre ellos, la función de reconocimiento de actividad reconoce el estado de movimiento del usuario a través de sensores de aceleración, información de la red celular y magnetómetro, por lo que es fácil ajustar la aplicación al comprender el comportamiento del usuario. La función de geofencing puede establecer el área de ubicación de interés a través de la API, y cuando se produce la operación especificada (como salir, entrar, quedarse), el teléfono móvil puede recibir una notificación a tiempo. La función de posicionamiento integrada combina GNSS, Wi-Fi y datos de ubicación de la estación base para proporcionar un conjunto de API fáciles de usar, lo que facilita la obtención rápida de información de ubicación del dispositivo y lograr un posicionamiento preciso.

Posicionamiento de fusión: basado en el posicionamiento de fusión de usos múltiples para lograr un posicionamiento preciso

Con el desarrollo de la tecnología de comunicación 5G, la tecnología de posicionamiento por fusión integra todos los métodos de posicionamiento actualmente en el mercado, incluidos GNSS, posicionamiento Wifi, posicionamiento de estación base, posicionamiento Bluetooth y posicionamiento de sensores. Puede describirse como un maestro de la tecnología de posicionamiento.

Cuando GNSS localiza por primera vez, es necesario volver a obtener la información de efemérides y el posicionamiento se puede realizar solo después de buscar las estrellas. Cuando la señal GNSS es débil, el posicionamiento auxiliar se puede realizar rápidamente, aumentando la tasa de éxito del posicionamiento y logrando un posicionamiento preciso. Y puede elegir un método de posicionamiento adecuado de acuerdo con la carga de la batería del teléfono móvil para evitar el consumo de energía del posicionamiento GNSS cuando la carga de la batería del teléfono móvil es baja.

2

 

¿Cómo obtener información de ubicación de forma continua?

Si desea que la aplicación obtenga continuamente la ubicación del dispositivo, puede utilizar la interfaz requestLocationUpdates () proporcionada por el servicio de ubicación . Esta interfaz devolverá información de ubicación en dos formas diferentes de acuerdo con las diferentes formas de entrada. Uno es devolver un objeto LocationResult que contiene información de ubicación llamando al método de devolución de llamada onLocationResult () en la clase LocationCallback definida , y el otro es devolver la información de ubicación en la información extendida de PendingIntent.

Cuando la aplicación ya no necesita recibir actualizaciones de ubicación, debe detener las actualizaciones de ubicación para reducir el consumo de energía. Para detener las actualizaciones de ubicación, puede llamar a removeLocationUpdates (), pasando el objeto LocationCallback o PendingIntent correspondiente a la interfaz requestLocationUpdates () . Aquí está el método de devolución de llamada como ejemplo, el código es el siguiente. Para obtener una descripción detallada de los parámetros, consulte la descripción de la interfaz LocationService .

1. Configure los parámetros de solicitud de posicionamiento continuo.

LocationRequest mLocationRequest = new LocationRequest();
// 设置位置更新的间隔(单位为毫秒)
mLocationRequest.setInterval(10000);
// 设置定位类型
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

2. Defina la devolución de llamada de actualización de ubicación.

LocationCallback mLocationCallback;        
mLocationCallback = new LocationCallback() {        
    @Override        
    public void onLocationResult(LocationResult locationResult) {        
        if (locationResult != null) {        
            // 处理位置回调结果        
        }        
    }        
};

3. Llame a requestLocationUpdates () para un posicionamiento continuo.

fusedLocationProviderClient        
    .requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())        
    .addOnSuccessListener(new OnSuccessListener<Void>() {        
        @Override        
        public void onSuccess(Void aVoid) {        
            // 接口调用成功的处理        
        }        
    })
    .addOnFailureListener(new OnFailureListener() {        
        @Override        
        public void onFailure(Exception e) {        
           // 接口调用失败的处理        
        }        
    });

4. Llame a removeLocationUpdates () para detener las actualizaciones de ubicación.

// 注意:停止位置更新时,mLocationCallback必须与requestLocationUpdates方法中的LocationCallback参数为同一对象。
fusedLocationProviderClient.removeLocationUpdates(mLocationCallback)        
    // 停止位置更新成功监听回调
    .addOnSuccessListener(new OnSuccessListener<Void>() {        
        @Override        
        public void onSuccess(Void aVoid) {      
           // ...        
        }        
    })
    // 停止位置更新失败监听回调
    .addOnFailureListener(new OnFailureListener() {        
        @Override        
        public void onFailure(Exception e) {      
           // ...      
        }        
    });

12

 

Para obtener más detalles, consulte:

Sitio web oficial de los servicios de ubicación de Huawei 

Guía de desarrollo del servicio de ubicación

Código de muestra

 

>> Visite el sitio web oficial de Huawei Developer Alliance para obtener más información al respecto

>> Obtenga documentos de orientación de desarrollo

>> Dirección del almacén de código abierto del servicio móvil de Huawei: GitHub , Gitee

Síganos y conozca la información técnica más reciente de los servicios móviles de Huawei por primera vez ~

Supongo que te gusta

Origin blog.csdn.net/HUAWEI_HMSCore/article/details/115301133
Recomendado
Clasificación