Мне нужно получить текущее местоположение, сохранить их в Bundle
и перенаправить в BroadCastReceiver
, который будет срабатывать каждую 5-ю секунду. Вот как я структурировал свой код
public class GPSServiceActivity extends Activity {
public Bundle locationBundle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationBundle = new Bundle();
Calendar cal = Calendar.getInstance();
getCurrentLocation();
Intent intent = new Intent(GPSServiceActivity.this, GPSHandler.class);
intent.putExtra("Latitude", locationBundle.getDouble("Latitude"));
intent.putExtra("Longitude", locationBundle.getDouble("Longitude"));
// In reality, you would want to have a static variable for the request
// code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000,
sender);
}
public void getCurrentLocation() {
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 0, mlocListener);
}
/* Class My Location Listener */
public class MyLocationListener implements LocationListener {
public void onLocationChanged(Location loc) {
double Latitude = loc.getLatitude();
double Longitude = loc.getLongitude();
locationBundle.putDouble("Longitude", Longitude);
locationBundle.putDouble("Latitude", Latitude);
}
public void onProviderDisabled(String arg0) {
}
public void onProviderEnabled(String arg0) {
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
}
}
My Manifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
После некоторого времени отладки кода я обнаружил, что MyLocationListener
никогда не срабатывает, а Bundle locationBundle
просто содержит два значения double со значением 0.0 и 0.0. Может ли кто-нибудь дать мне подсказку о том, как получить это и запустить?
ИЗМЕНИТЬ
Просто для тестов я написал этот код
List<String> providers = mlocManager.getAllProviders();
if(providers.size() > 0) {
for(int i = 0; i < providers.size(); i++) {
Log.i("Providers: ", providers.get(i).toString());
}
}
else
Log.i("Providers: ", "No providers");
И это выводит
network
gps
passive