addProximityAlert最初工作

时间:2013-07-10 18:08:08

标签: android android-intent android-pendingintent android-location

我创建了许多ProximityAlerts。它似乎只是第一个工作,有时是第二个。他们似乎也到期了。我将此方法称为创建ProximityAlert:

public boolean addProximityAlert(int id) {

  locationManager.addProximityAlert(
    latitude,
    longitude,
    POINT_RADIUS,             
    PROX_ALERT_EXPIRATION,      
    getPendingIntent(id)    
  );

  registerReceiver(new ProximityIntentReceiver(), getIntentFilter(id));

  return true;
}

private PendingIntent getPendingIntent(int id) {
  Intent intent = new Intent(PROX_ALERT_INTENT + id);
  intent.setAction(String.valueOf(id));
  return PendingIntent.getBroadcast(getApplicationContext(), id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}

private IntentFilter getIntentFilter(int id) {
    IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + id);
    filter.addAction(String.valueOf(id));
    return filter;
}

在ProximityIntentReceiver中扩展BroadcastReceiver:

@Override
public void onReceive(Context context, Intent intent) {
    String key = LocationManager.KEY_PROXIMITY_ENTERING;

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

    if (entering) {
        message = context.getString(R.string.notification_alert_entering);
    } else {
        message = context.getString(R.string.notification_alert_exiting);
    }

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

    Notification notification = createNotification();
    notification.setLatestEventInfo(context, context.getString(R.string.notification_alert), message, pendingIntent);

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID, notification);

}

变量:

private static final long MINIMUM_DISTANCECHANGE_FOR_UPDATE = 1;    // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATE = 1000;       // in Milliseconds
private static final long POINT_RADIUS = 500;                       // in Meters
private static final long PROX_ALERT_EXPIRATION = -1;
private static final String PROX_ALERT_INTENT = "com.xxx.yyy.ProximityAlert";

我想创建一些独特的警报,然后每次进入或离开附近时都会收到通知(可能会多次发生)。所有警报都应该保持有效,有人可以指出我正确的方向,为什么这不能正常工作?

1 个答案:

答案 0 :(得分:1)

这就是我增加接近度的方式:

String geo = "geo:" + storeProximityData.getLatitude() + ","
                    + storeProximityData.getLongitude();
            Intent intent1 = new Intent(PROXIMITY_ALERT_HOME, Uri.parse(geo));
            PendingIntent proximityIntent = PendingIntent.getBroadcast(
                    sContext.getApplicationContext(), 0, intent1,
                    PendingIntent.FLAG_CANCEL_CURRENT);
            sLocationManager.addProximityAlert(
                    storeProximityData.getLatitude(), // the
                    // latitude
                    // of
                    // the
                    // central
                    // point
                    // of
                    // the alert region
                    storeProximityData.getLongitude(), // the longitude of
                                                        // the
                                                        // central point of
                                                        // the
                                                        // alert
                    // region
                    storeProximityData.getRadius(), // the radius of the
                                                    // central
                                                    // point of the
                                                    // alert
                                                    // region, in
                    // meters
                    expirationTime, // time for this proximity alert, in
                    // milliseconds, or -1 to
                    // indicate no expiration
                    proximityIntent // will be used to generate an Intent to
                                    // fire
                    // when entry to or exit from the alert region
                    // is detected
                    );

这就是我注册接收器的方式:

private static String PROXIMITY_ALERT_HOME = "path.to.ProximityAlert";
IntentFilter filter = new IntentFilter(PROXIMITY_ALERT_HOME);
            filter.addDataScheme("geo");
            sContext.registerReceiver(
                    new ProximityResponderBroadcastReceiver(), filter);