2013-07-24 2 views
0

Мне нужно найти текущее местоположение либо с сетью, либо через gps.
Я искал через Интернет и в stackoverflow, но я не могу найти, что не так с этим кодом.
я также установить этот параметр в манифесте:не может найти текущее местоположение через gps или сеть

uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" 
uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" 

так вот мой код:

LocationManager locationManager; 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    findCurrentLocation(); 
    //some other stuff here 
} 

public void findCurrentLocation() 
{   
    boolean networkEnabled = false; 
    boolean gpsEnabled = false; 

    currentLocation = getLastKnownLocation(); 

    if(currentLocation == null) 
    { 
     currentLocation = new Location("sometext"); 

     locationFindDialog = ProgressDialog.show(this, "Find Your Location", "Please Wait", false); 

     try 
     { 
      networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     } 
     catch(Exception e) 
     { 

     } 

     try 
     { 
      gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     } 
     catch(Exception e) 
     { 

     } 

     if((networkEnabled == false) && (gpsEnabled == false)) 
     { 
      locationFindDialog.dismiss(); 
      showMessage("we need gps or sim card(or network) to find your location"); 
      //show message 
      //you need at least one provider 
      return; 
     } 

     if(networkEnabled) 
     { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener);     
     } 

     if(gpsEnabled) 
     { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener); 
     } 
    } 

    private final LocationListener networkLocationListener = new LocationListener() 
{ 

    @Override 
    public void onLocationChanged(Location location) 
    { 

     currentLocation.set(location);   

     //unregister listener 
     locationManager.removeUpdates(this); 
     locationManager.removeUpdates(gpsLocationListener);   
     locationFindDialog.dismiss();   
    } 

    @Override 
    public void onProviderDisabled(String provider) 
    { 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) 
    { 

    }  
}; 

private final LocationListener gpsLocationListener = new LocationListener() 
{ 

    @Override 
    public void onLocationChanged(Location location) 
    { 
     currentLocation.set(location);   

     //unregister listener 
     locationManager.removeUpdates(this); 
     locationManager.removeUpdates(networkLocationListener);   
     locationFindDialog.dismiss(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) 
    { 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) 
    { 

    } 

}; 

private Location getLastKnownLocation() 
{ 
    Location location = null; 
    List<String> providers = locationManager.getAllProviders(); 

    for(String provider : providers) 
    { 
     location = locationManager.getLastKnownLocation(provider); 
     if(location != null) 
     {    
      return location; 
     } 
    }  
    return null; 
} 

не матер, сколько я ждать, приложение не дают мне место.
что с этим кодом и как я могу это исправить?

+0

сделал и использовать разрешение пользователя Интернет? –

+0

@Araibkarim: нет, это необходимо? – mehdok

+1

Просматривая здесь: http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener) Я вижу, что вы не предоставляя достаточно времени для предоставления (GPS или NETWORK) для обновления местоположения. Попробуйте 'locationManager.requestLocationUpdates (LocationManager.NETWORK_PROVIDER, 2 * 1000 * 60, 0, networkLocationListener); // 2 минуты и установите для этого времени для GPS минимум 5 минут. – g00dy

ответ

0

Наконец-то я нашел решение этой проблемы, идея заключается в поиске cellId и lac вручную, а затем отправить их в API секретности google и найти широту и долготу ячеистой башни, это не слишком точно (потому что это местоположение ячейки ячейки не местоположение пользователя), но для меня это достаточно.

относятся к этому адресу для получения дополнительной информации:
http://sunil-android.blogspot.com/2013/01/convert-celllocation-to-real-location.html

Смежные вопросы