2

多数の ProximityAlerts を作成します。それは最初の作品といつか2番目の作品だけのようです。また、有効期限が切れているようです。このメソッドを呼び出して、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";

多数の一意のアラートを作成し、近接に出入りするたびに通知を受け取りたいと思います (複数回発生する可能性があります)。すべてのアラートは有効なままである必要があります。これが正しく機能しない理由を誰かが正しい方向に向けてくれますか?

4

1 に答える 1

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);
于 2013-07-10T18:43:30.563 に答える