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: /

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top