如何在Android中合并多个邻近警报?

时间:2015-04-02 19:28:54

标签: android gps broadcastreceiver alert proximity

所以,我正在尝试制作一个寻宝游戏,并使用邻近警报来显示一些文字。我有很多问题,但我的第一个障碍是弄清楚如何处理多个接近警报。运行应用程序并通过DDMS发送GPS坐标时,我没有收到来自警报的通知。继承人代码......

公共类FCRun扩展了活动{

private static final long MINIMUM_DISTANCECHANGE_FOR_UPDATE = 19;               // in meters
private static final long MINIMUM_TIME_BETWEEN_UPDATE = 10000;                  // in Milliseconds
private static final long POINT_RADIUS = 6;                                     // in meters
private static final long PROX_ALERT_EXPIRATION = -1;                           
private static final String POINT_LATITUDE_KEY = "POINT_LATITUDE_KEY";
private static final String POINT_LONGITUDE_KEY = "POINT_LONGITUDE_KEY";

private static final String PROX_ALERT_INTENT = "King Hendo Tools";

private LocationManager lm;
private MyLocationListener mylistener;

private IntentFilter intFilter;


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fcrun);

        // Get the location Manager  (code from http://examples.javacodegeeks.com/android/core/location/android-location-based-services-example/)
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        lm.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATE,
                MINIMUM_DISTANCECHANGE_FOR_UPDATE,
                new MyLocationListener());

        // the last known location of the provider
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        mylistener = new MyLocationListener();

        if (location != null) {
            mylistener.onLocationChanged(location);
        } else {
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
        }
        // location updates: at least 15 meters and 10 seconds change
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 15, mylistener);

 }

private class MyLocationListener implements LocationListener {
     @Override
     public void onLocationChanged(Location location) {

     }
     @Override
     public void onProviderDisabled(String provider) {

     }
     @Override
     public void onProviderEnabled(String provider) {

     }
     @Override
     public void onStatusChanged(String provider, int status, Bundle extras) {

     }
 }

 private void addProximityAlert(double latitude, double longitude) {
     Intent intent = new Intent(PROX_ALERT_INTENT);
     PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

     /*
     lm.addProximityAlert(
             latitude, // the latitude of the central point of the alert region
             longitude, // the longitude of the central point of the alert region
             POINT_RADIUS, // the radius of the central point of the alert region, in meters
             PROX_ALERT_EXPIRATION, // 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
             );
             */  
     lm.addProximityAlert (38.19776, -84.8672, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.196, -84.8674, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.19518, -84.8666, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.19472, -84.8661, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.19388, -84.8649, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.19353, -84.8647, 6, 10000, proximityIntent);
     lm.addProximityAlert (38.19373, -84.8661, 6, 10000, proximityIntent);

     IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
     registerReceiver(new ProximityIntentReceiver(), filter);
 }

 @Override
 protected void onResume() {
     super.onResume();
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 15, mylistener);
 }

 @Override
 protected void onPause() {
     super.onPause();
     lm.removeUpdates(mylistener);
 }

}

接下来是广播接收器的代码......

public class ProximityIntentReceiver extends BroadcastReceiver {

private static final int NOTIFICATION_ID = 1000;

@Override
public void onReceive(Context context, Intent intent) {
    String key = LocationManager.KEY_PROXIMITY_ENTERING;
    Boolean entering = intent.getBooleanExtra(key, false);
    if (entering) {
        Log.d(getClass().getSimpleName(), "entering");

    }
    else {
        Log.d(getClass().getSimpleName(), "exiting");
    }

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

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


    Notification notification = createNotification();
    // notification.setLatestEventInfo(context, "Proximity Alert", "You are near your point of interest.", pendingIntent);
    notification.setLatestEventInfo(context, "Proximity Alert", "You are near your point of interest.", pendingIntent);
    notificationManager.notify(NOTIFICATION_ID, notification);

}


private Notification createNotification() {
    Notification notification = new Notification();

    notification.icon = R.drawable.ic_launcher;
    notification.when = System.currentTimeMillis();

    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.flags |= Notification.FLAG_SHOW_LIGHTS;

    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notification.defaults |= Notification.DEFAULT_LIGHTS;

    notification.ledARGB = Color.WHITE;
    notification.ledOnMS = 1500;
    notification.ledOffMS = 1500;

    return notification;
}

}

关于为什么我没有收到弹出通知的任何想法???

谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

好的,我明白了。加布是正确的,一旦我弄清楚如何做到这一点,我的接近警报就开始了。