Uygulama senaryolarım, çalışanların konumunu izlemek istiyorum. Cihaz önyükleme yayınını dinleyen ve bir alarm yöneticisi kaydeden bir yayın alıcım var. Alarm yöneticisi işaretlendiğinde, biri gps'yi ve ağ için diğerlerini dinlemek üzere iki konum dinleyiciyi kaydeder. OnLocationChange() yönteminde ilk konum güncellemesini aldığımda, konumu kaydedip bu konum dinleyicisinin kaydını sildiğimde bunu, alarm yöneticisi tekrar işaretlediğinde yinelenmez. Kayıtları kaldırmak için, konum dinleyicilerine onLocationChange() öğesinde erişecek statik nesneler olarak sahibim. Ancak konum dinleyicisini kaldırmanın YANLIŞ olduğunu anlamıştım. İşte benim kod örneğim:LocationManager.removeUpdates (listener) konum dinleyicisini kaldırmıyor
public class BootTimeServiceActivator extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Calendar calendar = Calendar.getInstance();
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent mIntent = new Intent(context, MyBroadCastReceiver.class);
PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 20 * 60 * 1000, mPendingIntent);
}
}
//..........
public class MyBroadCastReceiver extends BroadcastReceiver{
public static LocationManager locationManager;
public static MyLocationListener networkLocationListener;
public static MyLocationListener gpsLocationListener;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Alarm has been called...", Toast.LENGTH_SHORT).show();
initLocationListeners(context);
registerLocationListeners();
}
public void initLocationListeners(Context context) {
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
networkLocationListener = new MyLocationListener(context);
gpsLocationListener = new MyLocationListener(context);
}
public void registerLocationListeners() {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, gpsLocationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, gpsLocationListener);
}
}
\\.....
public class MyLocationListener implements LocationListener {
Context context;
public MyLocationListener(Context context) {
this.context = context;
}
@Override
public void onLocationChanged(Location location) {
if(location != null) {
SDCardService sdService = new SDCardService(context);
try {
sdService.logToDB(location);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("provider",location.getProvider());
if(location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
MyBroadCastReceiver.locationManager.removeUpdates(MyBroadCastReceiver.gpsLocationListener);
}
else if(location.getProvider().equals(LocationManager.NETWORK_PROVIDER)) {
MyBroadCastReceiver.locationManager.removeUpdates(MyBroadCastReceiver.networkLocationListener);
}
}
}
Yanlış nerede olduğumu bana rehberlik edebilir misiniz?
o zaman yaptığımız değişiklik nedir? Ağ dinleyicinizi kaldırırsanız ağ güncellemelerini alamayacaksınız. – amandroid
evet çünkü tek bir yer güncellemesi almak istiyorum. –