0

I found hundreds of topics related to the same problem, but I cannot understand where I get wrong! Because I have written the same code basically...

This is a service which controls the position and adds a promityAlert

public class GeoReminderService extends Service implements LocationListener{
private LocationManager locationManager;
private  final String proximityIntentAction = "com.example.geo.ProximityIntentReceiver";

private float latitude;
private float longitude;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 10, this);

    addProximityAlert(45.477872,9.23457);

    return Service.START_STICKY;
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onLocationChanged(Location location) {
    Log.v("Service","Location changed");
    if (location != null) {
            Log.v("Location changed : Lat: ", ""+location.getLatitude());
            Log.v("Location changed : Lon: ", ""+location.getLongitude());
    }
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

private void addProximityAlert(double latitude, double longitude) {
    Log.v("Service","proximity alert added" + latitude +" "+ longitude);        
    Intent intent = new Intent(proximityIntentAction);

    PendingIntent proximityIntent = PendingIntent.getBroadcast(getApplicationContext(), -1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    locationManager.addProximityAlert(latitude, longitude, 3000, -1, proximityIntent);
    IntentFilter filter = new IntentFilter(proximityIntentAction); 
    registerReceiver(new ProximityIntentReceiver(), filter);
}

Instead this one is the receiver which should captures the event

public class ProximityIntentReceiver extends BroadcastReceiver {

private static final int NOTIFICATION_ID = 1000;

@Override
public void onReceive(Context context, Intent intent) {
    Log.v("proximity receiver", "alert received");
    String key = LocationManager.KEY_PROXIMITY_ENTERING;

    Boolean entering = intent.getBooleanExtra(key, false);

    if (entering) {
        Log.v("ProximityIntentReceiver", "entering");
    }
    else {
        Log.v("ProximityIntentReceiver", "exiting");
    }       
}

Even if I change the position (I am using the Android emulator) the event onReceive doesn't fire. At the same time I am sure that I am changing the position correctly , since the event locationChanged works. Can anyone help me, please?

4

1 回答 1

0

您是否在清单中声明了 ProximityIntentReceiver?

在您声明活动等的清单的同一区域中,您还将声明您的 BroadcastReceiver。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.geo"
    android:versionCode="001"
    android:versionName="0.1"
    >
  <application>
    ...
    <receiver android:name=".ProximityIntentReceiver">
    </receiver>
  </application>
</manifest>
于 2013-04-18T22:35:20.917 回答