2010-02-09 2 views

ответ

269

Используйте LocationManager.

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
double longitude = location.getLongitude(); 
double latitude = location.getLatitude(); 

Вызов getLastKnownLocation() не блокирует - а это значит, он будет возвращать null, если нет позиции в настоящее время доступна - так что вы, вероятно, хотите взглянуть на пропускании LocationListener к requestLocationUpdates() method вместо этого, который даст вам асинхронные обновления вашего местоположения.

private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     longitude = location.getLongitude(); 
     latitude = location.getLatitude(); 
    } 
} 

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener); 

Вы должны дать ваше заявление ACCESS_FINE_LOCATION permission если вы хотите использовать GPS.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Вы также можете добавить ACCESS_COARSE_LOCATION permission для того, когда GPS не доступен, и выберите поставщика местоположения с getBestProvider() method.

+0

Большое спасибо, что он работает – deepthi

+0

будет это работает в эмуляторе. этот код показывает лати и longi в эмуляторе ??????? – Dray

+0

Работает как очарование в критической ситуации. Thanx Fork !!! – skygeek

36

Ниже приведен список LocationFinder, чтобы найти местоположение GPS. Этот класс позвонит MyLocation, который будет заниматься бизнесом.

LocationFinder

public class LocationFinder extends Activity { 

    int increment = 4; 
    MyLocation myLocation = new MyLocation(); 

    // private ProgressDialog dialog; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.intermediat); 
     myLocation.getLocation(getApplicationContext(), locationResult); 

     boolean r = myLocation.getLocation(getApplicationContext(), 
      locationResult); 

     startActivity(new Intent(LocationFinder.this, 
     // Nearbyhotelfinder.class)); 
      GPSMyListView.class)); 
     finish(); 
    } 

    public LocationResult locationResult = new LocationResult() { 

     @Override 
     public void gotLocation(Location location) { 
      // TODO Auto-generated method stub 
      double Longitude = location.getLongitude(); 
      double Latitude = location.getLatitude(); 

      Toast.makeText(getApplicationContext(), "Got Location", 
       Toast.LENGTH_LONG).show(); 

      try { 
       SharedPreferences locationpref = getApplication() 
        .getSharedPreferences("location", MODE_WORLD_READABLE); 
       SharedPreferences.Editor prefsEditor = locationpref.edit(); 
       prefsEditor.putString("Longitude", Longitude + ""); 
       prefsEditor.putString("Latitude", Latitude + ""); 
       prefsEditor.commit(); 
       System.out.println("SHARE PREFERENCE ME PUT KAR DIYA."); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }; 

    // handler for the background updating 

} 

MyLocation

public class MyLocation { 

    Timer timer1; 
    LocationManager lm; 
    LocationResult locationResult; 
    boolean gps_enabled=false; 
    boolean network_enabled=false; 

    public boolean getLocation(Context context, LocationResult result) 
    { 
     //I use LocationResult callback class to pass location value from MyLocation to user code. 
     locationResult=result; 
     if(lm==null) 
      lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

     //exceptions will be thrown if provider is not permitted. 
     try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){} 
     try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){} 

     //Toast.makeText(context, gps_enabled+" "+network_enabled,  Toast.LENGTH_LONG).show(); 

     //don't start listeners if no provider is enabled 
     if(!gps_enabled && !network_enabled) 
      return false; 

     if(gps_enabled) 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps); 
     if(network_enabled) 
      lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork); 
     timer1=new Timer(); 


     timer1.schedule(new GetLastLocation(), 10000); 
    // Toast.makeText(context, " Yaha Tak AAya", Toast.LENGTH_LONG).show(); 
     return true; 
    } 

    LocationListener locationListenerGps = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      timer1.cancel(); 
      locationResult.gotLocation(location); 
      lm.removeUpdates(this); 
      lm.removeUpdates(locationListenerNetwork); 
     } 
     public void onProviderDisabled(String provider) {} 
     public void onProviderEnabled(String provider) {} 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

    LocationListener locationListenerNetwork = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      timer1.cancel(); 
      locationResult.gotLocation(location); 
      lm.removeUpdates(this); 
      lm.removeUpdates(locationListenerGps); 
     } 
     public void onProviderDisabled(String provider) {} 
     public void onProviderEnabled(String provider) {} 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

    class GetLastLocation extends TimerTask { 
     @Override 

     public void run() { 

      //Context context = getClass().getgetApplicationContext(); 
      Location net_loc=null, gps_loc=null; 
      if(gps_enabled) 
       gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      if(network_enabled) 
       net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

      //if there are both values use the latest one 
      if(gps_loc!=null && net_loc!=null){ 
       if(gps_loc.getTime()>net_loc.getTime()) 
        locationResult.gotLocation(gps_loc); 
       else 
        locationResult.gotLocation(net_loc); 
       return; 
      } 

      if(gps_loc!=null){ 
       locationResult.gotLocation(gps_loc); 
       return; 
      } 
      if(net_loc!=null){ 
       locationResult.gotLocation(net_loc); 
       return; 
      } 
      locationResult.gotLocation(null); 
     } 
    } 

    public static abstract class LocationResult{ 
     public abstract void gotLocation(Location location); 
    } 
} 
+0

приятный произведение мужчина .. !!! выше код не работал, но ваш код работает нормально, !! Странно, почему люди не то, что вы! .. thnks –

+13

@sandy этот комментарий aweomse Toast.makeText (контекст, «Yaha Tak AAya», Toast.LENGTH_LONG) .show(); +1 – rup35h

+1

спасибо @ rup35h, используя собственный язык, позволяет легко. – sandy

4

выше решений тоже правильно, но через некоторое время, если место является недействительным, то это сбой приложения или не работает должным образом. Лучший способ получить широту и долготу андроид:

Geocoder geocoder; 
    String bestProvider; 
    List<Address> user = null; 
    double lat; 
    double lng; 

    LocationManager lm = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); 

    Criteria criteria = new Criteria(); 
    bestProvider = lm.getBestProvider(criteria, false); 
    Location location = lm.getLastKnownLocation(bestProvider); 

    if (location == null){ 
     Toast.makeText(activity,"Location Not found",Toast.LENGTH_LONG).show(); 
     }else{ 
     geocoder = new Geocoder(activity); 
     try { 
      user = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); 
     lat=(double)user.get(0).getLatitude(); 
     lng=(double)user.get(0).getLongitude(); 
     System.out.println(" DDD lat: " +lat+", longitude: "+lng); 

     }catch (Exception e) { 
       e.printStackTrace(); 
     } 
    } 
11

вы можете есть Текущий LatLng с помощью этого

`

public class MainActivity extends ActionBarActivity { 
    private LocationManager locationManager; 
    private String provider; 
    private MyLocationListener mylistener; 
    private Criteria criteria; 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
       // Define the criteria how to select the location provider 
       criteria = new Criteria(); 
       criteria.setAccuracy(Criteria.ACCURACY_COARSE); //default 

       // user defines the criteria 

       criteria.setCostAllowed(false); 
       // get the best provider depending on the criteria 
       provider = locationManager.getBestProvider(criteria, false); 

       // the last known location of this provider 
       Location location = locationManager.getLastKnownLocation(provider); 

       mylistener = new MyLocationListener(); 

       if (location != null) { 
        mylistener.onLocationChanged(location); 
       } else { 
        // leads to the settings because there is no last known location 
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        startActivity(intent); 
       } 
       // location updates: at least 1 meter and 200millsecs change 
       locationManager.requestLocationUpdates(provider, 200, 1, mylistener); 
      String a=""+location.getLatitude(); 
      Toast.makeText(getApplicationContext(), a, 222).show(); 

} 

private class MyLocationListener implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 
     // Initialize the location fields 



      Toast.makeText(MainActivity.this, ""+location.getLatitude()+location.getLongitude(), 
        Toast.LENGTH_SHORT).show() 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      Toast.makeText(MainActivity.this, provider + "'s status changed to "+status +"!", 
        Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Toast.makeText(MainActivity.this, "Provider " + provider + " enabled!", 
      Toast.LENGTH_SHORT).show(); 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Toast.makeText(MainActivity.this, "Provider " + provider + " disabled!", 
      Toast.LENGTH_SHORT).show(); 
     } 
    }   

`

17

С google вещи изменений очень часто: для меня не работали предыдущие ответы.

апреля 2016

на основе this google training вот как вы это делаете с помощью

слиты провайдеров местонахождения

это требует настроить Google Play Services

активность класс

public class GPSTrackerActivity extends AppCompatActivity implements 
    GoogleApiClient.ConnectionCallbacks,  
GoogleApiClient.OnConnectionFailedListener { 

private GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 

} 

protected void onStart() { 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    try { 

     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mLastLocation != null) { 
      Intent intent = new Intent(); 
      intent.putExtra("Longitude", mLastLocation.getLongitude()); 
      intent.putExtra("Latitude", mLastLocation.getLatitude()); 
      setResult(1,intent); 
      finish(); 

     } 
    } catch (SecurityException e) { 

    } 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 
} 

использование

в вас деятельности

Intent intent = new Intent(context, GPSTrackerActivity.class); 
    startActivityForResult(intent,1); 

И этот метод

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == 1){ 
     Bundle extras = data.getExtras(); 
     Double longitude = extras.getDouble("Longitude"); 
     Double latitude = extras.getDouble("Latitude"); 
    } 
} 
+1

И объявить активность в файле AndroidManifest xml – DAVIDBALAS1

+3

@ DAVIDBALAS1 Android Studio позаботится об этом для вас сейчас. –