ubicación ubicacion tiempo seleccionar real quitar prueba para icono google desde desactivar compartir como chrome app aplicacion aparece activar android service push-notification

android - tiempo - seleccionar aplicacion de ubicacion de prueba huawei



Cómo enviar la ubicación del dispositivo en el servidor cuando sea necesario (2)

Aquí esta lo que hice.

  1. Busque y almacene ubicaciones utilizando el proveedor de ubicación fusionada de servicios de Google Play como se describe aquí aquí

  2. Evitaría configurar un servicio, en su lugar debería activar una alarma que solicite la última ubicación disponible. Esto ahorra aún más batería ya que la aplicación no busca un valor de ubicación, sino que utiliza lo que otras aplicaciones podrían haber solicitado recientemente. En mi opinión, la respuesta recibida es bastante precisa ... así que haz algo como esto

    public class LocationReceiver extends BroadcastReceiver { // Restart service every 30 seconds private static final long REPEAT_TIME = 1000 * 60 * 5; private static final long REPEAT_DAILY = 1000 * 60 * 60 * 24; @Override public void onReceive(Context context, Intent intent) { Log.v("TEST", "Service loaded at start"); AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 0); Intent i = new Intent(context, ServiceStartReceiver.class); PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,PendingIntent.FLAG_CANCEL_CURRENT); service.setInexactRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), REPEAT_TIME, pending); } }

  3. Como no ha mencionado que desea las actualizaciones en tiempo real, creo que puede volcar todos los datos en una base de datos sqlite temporal.

  4. Cree un receptor para escuchar los cambios en la red y cuando esté sobre wifi simplemente envíe todos los datos a su servidor. Puede ser un poco más inteligente al hacer esto enviando solo cuando se haya acumulado cierto número de entradas o en un intervalo periódico.

  5. Alternativamente, el servidor puede enviar un ping a la aplicación a través de una notificación de GCM que también puede activar el envío de datos a su servidor. este es un tutorial increíble para describir el envío de mensajes GCM a la aplicación.

  6. Finalmente, se mencionan algunas estrategias de ubicación muy interesantes aquí . Puede ver cuándo activar su ubicación guardada según la actividad del usuario o algún otro contexto.

Espero que esto ayude.

Estoy desarrollando una aplicación en la que necesito latitud y longitud actuales del dispositivo. El tiempo para obtener la latitud / longitud será decidido por el servidor. El servidor enviará una notificación cada vez que se requiera recuperar lat / lang. Cuando el dispositivo recibe una notificación del servidor, al mismo tiempo el dispositivo envía su ubicación al servidor.

Algunas condiciones:

  • Quiero lat / long incluso si el dispositivo no tiene gps

  • si el usuario no toca ni hace clic en la notificación, entonces también quiero buscar latitud / longitud, es decir, incluso si el dispositivo está en modo de suspensión.

  • Además, no quiero ejecutar un servicio en segundo plano durante todo el día, ya que consume la batería del dispositivo.


Definitivamente recomendaría usar Google Cloud Messaging aquí. Esto tiene la ventaja de que una vez que un dispositivo ejecuta su aplicación, puede hacer que se registre en GCM y puede enviarles un mensaje que los haga registrar sus coordenadas en su base de datos.

Este enfoque necesitaría que tenga que implementar algún servidor (por ejemplo, un servidor web con PHP) y hacer que los usuarios se comuniquen con él, para que el flujo sea:

  1. Su servidor envía un mensaje de difusión a todos los dispositivos registrados diciéndoles que tienen que registrarse en el servicio GCM .

  2. Los dispositivos reciben el mensaje e implementa BroadcastReceiver para obtener latitud y longitud y enviarlo a su servidor remoto, por ejemplo, http://www.mysuperserver.com/getlonglat.php , a través de una solicitud POST .

  3. Su servidor toma ambos parámetros y los guarda o hace lo que necesita.

Si desea seguir este enfoque, estos son los pasos que debe seguir:

  1. Vaya a https://console.developers.google.com . Con su cuenta de Google, registre un nuevo proyecto. Esto le proporcionará una clave de API y una ID de remitente.

  2. Tendrá que hacer que el dispositivo se registre contra su proyecto en GCM . Puede lograr esto al importar los servicios de Google Play Services dentro de su proyecto, y una vez hecho esto, haga algo similar a esto:

    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); final String regid = gcm.register("YOUR_SENDER_ID");

  3. En este momento, el servidor de GCM ya sabe que este usuario se ha registrado dentro de su proyecto y le ha dado un regid .

  4. El siguiente paso es informar a su propio servidor remoto que el usuario lo ha hecho, y guardar en algún lugar el regid que se le ha asignado, para que luego pueda enviarle mensajes. Entonces, en el lado del cliente, haga una solicitud HTTP POST contra su servidor enviando ese regid y trátelo con algo como esto:

    $regid = $_POST[''regid'']; if (($regId) && ($ipAddr)) sql_query("INSERT INTO gcm_subscribers(regid) VALUES($regid'')");

  5. Una vez hecho esto, ya sabes quién ya se ha registrado contra tu base de datos. Puede SELECT todos los usuarios y enviarles una señal para que le devuelvan sus coordenadas. En el siguiente ejemplo, los parámetros serían, en primer lugar, una matriz de ID de registro y, en segundo lugar, el mensaje a enviar (por ejemplo, $messageData = "sendMeYourCoords!" ).

    function sendNotification($registrationIdsArray, $messageData) { $apiKey = "YOUR_API_KEY"; $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey); $data = array( ''data'' => $messageData, ''registration_ids'' => $registrationIdsArray ); $ch = curl_init(); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) ); $response = curl_exec($ch); curl_close($ch); return $response; }

  6. Una vez que esté en su cliente, simplemente procese ese mensaje GCM y haga otra POST a otra URL en su servidor remoto y páselo por la longitude y la latitude . Para procesar los mensajes, incluyo algunos enlaces a continuación.

Y para obtener las coordenadas sin GPS parece que no hay demasiadas soluciones, pero hay algunas. Este sería un ejemplo: ¿Cómo obtener el valor Latitud Longitud sin usar GPS en Android?

Más sobre esto: