I want to get the current location and add a proximity alert to that location. When ever I exit or enter a radius around the current location. As I am getting the current location's latitude and longitude and adding the proximity alert, I get an alert as soon as I register. But I am not getting when I exit even if i am on the foreground. I have registered my reciever in the manifest.
This is my Activity.
public class GeoFencer extends FragmentActivity implements LocationListener {
private LocationManager locMan, locManForProximitySensor;
private Intent i;
private PendingIntent pService;
Context context;
@Override
protected void onCreate(Bundle arg0) {
setContentView(R.layout.geo_fencer_layout);
super.onCreate(arg0);
context = this;
locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locManForProximitySensor = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
i = new Intent("com.packagename.proximity");
pService = PendingIntent.getBroadcast(this, 0 , i, 0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater= getMenuInflater();
inflater.inflate(R.menu.geofencemenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_geo){
if(locMan.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
else if(locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
else
Toast.makeText(this, "GPS is disabled. Please Enable.", Toast.LENGTH_LONG).show();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onLocationChanged(Location location) {
locManForProximitySensor.addProximityAlert(location.getLatitude(), location.getLongitude(), 10, -1 , pService) ;
Log.d(getClass().getSimpleName(),"Proximity alert added (" + location.getLatitude() + ", "+ location.getLongitude() + ")");
locMan.removeUpdates(this);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
}
My Reciever
public class ProximityAlertReceiver extends BroadcastReceiver{
private static final int NOTIFICATION_ID = 1000;
@Override
public void onReceive(Context context, Intent intent) {
String key = LocationManager.KEY_PROXIMITY_ENTERING;
String message = " ";
Boolean entering = intent.getBooleanExtra(key, false);
if (entering) {
Log.d(getClass().getSimpleName(), "entering");
message = "You are entering your point";
}
else {
Log.d(getClass().getSimpleName(), "exiting");
message = "You are exiting your point";
}
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.app_icon)
.setContentTitle("CompanyName")
.setContentText(message);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
}
Please tell me what I am doing wrong here. Thanks in Adavance.
您应该添加以下标志之一:PendingIntent.FLAG_CANCEL_CURRENT或PendingIntent.FLAG_UPDATE_CURRENT。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.