简体   繁体   中英

Why is this code to get the location via GPS not working?

I am not able to get the location even though the GPS is enabled and all location managers and listeners are set correctly. Here's what I have so far:

public class GpsTest extends Activity  {
     private TextView text; 
     private LocationManager manager; 
     private LocationListener listener;
     private  Location myLocation;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (TextView)findViewById(R.id.textView1);
 try
 {
    manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    myLocation = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); //"gps"
    text.setText(("Lat: " + myLocation.getLatitude() 
                + "\nLLong: " + myLocation.getLongitude())); 
    listener = new MyLocationListener(); 
    manager.requestLocationUpdates(
                                    LocationManager.GPS_PROVIDER, 
                                    0, 
                                    1, 
                                    listener);
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){  
        Toast.makeText(this, "GPS is enable. ", Toast.LENGTH_SHORT).show();  
  }  
    else createGpsDisabledAlert();   
 }catch(Exception ex)
 {
     createGpsDisabledAlert(); 
 }
        } 


public void onclicklistener(View v){
    try
    {
      text.setText(("Lat: " + myLocation.getLatitude() 
              + "\nLLong: " + myLocation.getLongitude()));
    }catch(Exception ex)
    {
     Toast.makeText(this, "Error while getting locations. "+ex.toString(), Toast.LENGTH_SHORT).show();   
    }
  }
  private void createGpsDisabledAlert(){  
      AlertDialog.Builder builder = new AlertDialog.Builder(this);  
      builder.setMessage("GPS is disabled! Would you like to enable it?")  
           .setCancelable(false)  
           .setPositiveButton("Enable GPS",  
                new DialogInterface.OnClickListener(){  
                public void onClick(DialogInterface dialog, int id){  
                     showGpsOptions();  
                }  
           });  
           builder.setNegativeButton("No Thanks",  
                new DialogInterface.OnClickListener(){  
                public void onClick(DialogInterface dialog, int id){  
                     dialog.cancel();  
                }  
           });  
      AlertDialog alert = builder.create();  
      alert.show();  
      }   
  private void showGpsOptions(){  
      Intent gpsOptionsIntent = new Intent(  
              android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
      startActivity(gpsOptionsIntent);  
  }  



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

                        // TODO Auto-generated method stub 
                        if (location != null){ 
                                text.setText(("Lat: " + location.getLatitude() 
                                        + "\nLLong: " + location.getLongitude())); 
                        } 
                        Toast.makeText(GpsTest.this, ""+location, Toast.LENGTH_SHORT).show();
                } 
                public void onProviderDisabled(String provider) { 
                        // TODO Auto-generated method stub 
                } 
                public void onProviderEnabled(String provider) { 
                        // TODO Auto-generated method stub

                }
                @Override
                public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                    // TODO Auto-generated method stub

                } 
                } 
   public void onStatusChanged(String provider, int status, 
                Bundle extras) { 
                        // TODO Auto-generated method stub
                } 
 }

You must to use a thread with his run() method like this (Is in spanish, i hope this not a problem for you)

@Override
public void run() {

    mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

    if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        Looper.prepare();
        mToast.Make(getContext(),"GPS",0);
        mLocationListener = new MyLocationListener();
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
        Looper.loop(); 
        Looper.myLooper().quit(); 

    } else if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        Looper.prepare();
        mToast.Make(getContext(),"Triangulacion",0);
        mLocationListener = new MyLocationListener();
        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener);
        Looper.loop();
        Looper.myLooper().quit();
    }else{
        mToast.Make(context,"No se encuentra señal se procede a mandar un mensaje normal",0);
        Looper.prepare();
        handlerNormal.sendEmptyMessage(0);
        Looper.loop();
        Looper.myLooper().quit();
    }   

}   

Are you testing on emulator or real device? If you are testing on emulator, check this http://www.javacodegeeks.com/2010/09/android-location-based-services.html and read about DDMS section for location controls. You need to provide some dummy location data for first occurrence and after that it will grab your current location.

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM