all. I am writing an android app about GPS locations.
I tried it on emulator and entered the latitude and longitude manually, and it worked fine. However, my problem is: on the real device, in debugging mode, to go the next class by using intent can only be achieved when location is changed. If I start the app directly, I can see the blinking GPS icon, but the app will only stay here, and won t start the next activity. It seems that the variables in the onLocationChanged() will never be changed.
I have heard that to get the location instantly is to use the getLastKnownLocation() method. But I failed to get where I should use it.
Here is the class of how I use the LocationManager to get the locations.
Is there any solutions? I am quite confused. Thank you very much!!
public class mainMenu extends Activity{ private LocationManager locationManager = null; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent i3 = new Intent(); i3.setClass(mainMenu.this, police.class); i3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mainMenu.this.startActivityForResult(i3,0); } }); Button button2 = (Button)findViewById(R.id.button2); button2.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent i3 = new Intent(); i3.setClass(mainMenu.this, ambulance.class); i3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mainMenu.this.startActivityForResult(i3,0); } }); Button button3 = (Button)findViewById(R.id.button3); button3.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent i3 = new Intent(); i3.setClass(mainMenu.this, fire_station.class); i3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mainMenu.this.startActivityForResult(i3,0); } }); locationManager = (LocationManager)mainMenu.this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000 , 0, new MyLocationUpdater()); String provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); } public class MyLocationUpdater implements LocationListener{ //change location interface @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub // store the location data // get the best record Double lat = location.getLatitude(); Double lon = location.getLongitude(); System.out.println("The latitude is " + lat + "and " + "the longitude is "+ lon); Double lat11 = lat - 1/69.0; Double lat12 = lat + 1/69.0; Double lon11 = lon - 1/42.0; Double lon12 = lon + 1/42.0; StaticVariables.latS1 = lat11.toString(); StaticVariables.latN1 = lat12.toString(); StaticVariables.lonW1 = lon11.toString(); StaticVariables.lonE1 = lon12.toString(); Double lat111 = lat - 2/69.0; Double lat121 = lat + 2/69.0; Double lon111 = lon - 2/42.0; Double lon121 = lon + 2/42.0; StaticVariables.latS11 = lat111.toString(); StaticVariables.latN11 = lat121.toString(); StaticVariables.lonW11 = lon111.toString(); StaticVariables.lonE11 = lon121.toString(); // ================================================== // ambulances Double lat21 = lat - 3/69.0; Double lat22 = lat + 3/69.0; Double lon21 = lon - 3/42.0; Double lon22 = lon + 3/42.0; StaticVariables.latS2 = lat21.toString(); StaticVariables.latN2 = lat22.toString(); StaticVariables.lonW2 = lon21.toString(); StaticVariables.lonE2 = lon22.toString(); Double lat211 = lat - 5.5/69.0; Double lat221 = lat + 5.5/69.0; Double lon211 = lon - 5.5/42.0; Double lon221 = lon + 5.5/42.0; StaticVariables.latS21 = lat211.toString(); StaticVariables.latN21 = lat221.toString(); StaticVariables.lonW21 = lon211.toString(); StaticVariables.lonE21 = lon221.toString(); // =================================================== // fire stations Double lat31 = lat - 2/69.0; Double lat32 = lat + 2/69.0; Double lon31 = lon - 2/42.0; Double lon32 = lon + 2/42.0; StaticVariables.latS3 = lat31.toString(); StaticVariables.latN3 = lat32.toString(); StaticVariables.lonW3 = lon31.toString(); StaticVariables.lonE3 = lon32.toString(); Double lat311 = lat - 2/69.0; Double lat321 = lat + 2/69.0; Double lon311 = lon - 2/42.0; Double lon321 = lon + 2/42.0; StaticVariables.latS31 = lat311.toString(); StaticVariables.latN31 = lat321.toString(); StaticVariables.lonW31 = lon311.toString(); StaticVariables.lonE31 = lon321.toString(); Intent intent = new Intent(); intent.setClass(mainMenu.this, getPhoneNumber.class); mainMenu.this.startActivity(intent); } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } } }