Android: ADDPROXIMITYALERT LOCKETMANGER METHONTHING no envía transmisión
-
21-12-2019 - |
Pregunta
Estoy trabajando en un proyecto de Android donde estoy usando el método AdDPROXIMITYALERT, ya que ya conoce este método, le permite establecer una alerta de proximidad para la ubicación dada por la posición (latitud, longitud) y el radio dado, y notificarusted si está tan cerca de esto.
Así que estaba trabajando en eso durante tres días y estaba obteniendo el mismo problema una y otra vez ...
en BREF: Este es mi código simple.
# Mainactivity.Java
package com.example.proximityalert;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity implements LocationListener {
LocationManager lm;
//Defining Latitude & Longitude
double lat=37.422006 ,long1=-122.084095;
//Defining Radius
float radius=1000;
//Intent Action
String ACTION_FILTER = "com.example.proximityalert";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//i'm registering my Receiver First
registerReceiver(new ProximityReciever(), new IntentFilter(ACTION_FILTER));
//i'm calling ther service Location Manager
lm=(LocationManager) getSystemService(LOCATION_SERVICE);
//for debugging...
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);
//Setting up My Broadcast Intent
Intent i= new Intent(ACTION_FILTER);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), -1, i, 0);
//setting up proximituMethod
lm.addProximityAlert(lat, long1, radius, -1, pi);
}
@Override
//just For debugging to See the distance between my actual position and the aproximit point
public void onLocationChanged(Location newLocation) {
Location old = new Location("OLD");
old.setLatitude(lat);
old.setLongitude(long1);
double distance = newLocation.distanceTo(old);
Log.i("MyTag", "Distance: " + distance);
}
@Override
public void onProviderDisabled(String arg0) {}
@Override
public void onProviderEnabled(String arg0) {}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}
# proximityReceiver.Java
package com.example.proximityalert;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.util.Log;
import android.widget.Toast;
public class ProximityReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Key for determining whether user is leaving or entering
String key = LocationManager.KEY_PROXIMITY_ENTERING;
//Gives whether the user is entering or leaving in boolean form
boolean state = intent.getBooleanExtra(key, false);
if(state){
// Call the Notification Service or anything else that you would like to do here
Log.i("MyTag", "Welcome to my Area");
Toast.makeText(context, "Welcome to my Area", Toast.LENGTH_SHORT).show();
}else{
//Other custom Notification
Log.i("MyTag", "Thank you for visiting my Area,come back again !!");
Toast.makeText(context, "Thank you for visiting my Area,come back again !!", Toast.LENGTH_SHORT).show();
}
}
}
* # El problema es cuando ejecuto el programa, el sistema de transmisión (proximityreciever) nunca llamó por el sistema, incluso si estoy muy cerca del punto de proximit, e incluso si el depurador me muestra esa distancia entre las dos ubicacioneses <1000m: /
Solución
Simplemente descubrí algo sobre este tema y por qué el addproximityalert Sames no está funcionando, estoy compartiendo esto con usted porque noté que algunas personas hicieron la misma pregunta antes y no obtienen ninguna respuesta!
La respuesta fue justo delante de mí, pero no le presté atención, así que cuando estaba leyendo la documentación de Android Officiel ( aquí ) vi esta oración" Debido a la naturaleza aproximada de la estimación de la posición, si el dispositivo pasa a través del área dada brevemente, es posible que no se encienda la intención "
¿Qué significa eso? significa cuando está probando su aplicación en el AVD y u envíe una coordenada GPS (latitud, longitud) desde DDMS a AVD, es realmente difícil de Simule el aspecto real de un GPS, (porque en primer lugar, seleccione algún punto para ser su punto más proximo y, después de que elija el punto de anthor, muy lejos del punto de vista para ver si su trabajo) y eso no es lo que está feliz con un verdadero dispositivo.
Por lo tanto, la solución es probar su aplicación en un dispositivo real o con el DDMS, intente cambiar las cobordantes muy lentamente hasta que esté en la zona buscada.