2014-11-22 2 views
0

Я пытаюсь получить широту и долготу текущего местоположения, используя следующее:Как получить широту и долготу текущего местоположения в Android

GoogleMap map; 
map = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); 
map.setMyLocationEnabled(true); 

lat = map.getMyLocation().getLatitude(); 
lng = map.getMyLocation().getLongitude(); 

По какой-то причине две последних строки вызывают приложение к авария из-за NullPointerException. Что я делаю не так?

Самое большое, что меня обманывает, это тот факт, что map.setMyLocationEnabled(true); действительно устанавливает мое текущее местоположение.

Благодаря любому просматривающих этот

+0

в Andorid мы имеем LocationManager для Lat Lang так использовать LocationManager и получить Лый Лонг и нагрузки на Google карте –

ответ

0

Я нашел решение. Хотя я до сих пор не знаю, почему другие методы дают мне нулевой указатель, нижеследующий работает просто отлично и подходит моим потребностям.

LocationManager locman = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = locman .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
double lng = location.getLongitude(); 
double lat = location.getLatitude(); 
0

map.getMyLocation() является нулевым вы должны проверить, что условие

0

Ваше приложение разбивая потому

map.getMyLocation() 

возвращает нулевое значение, если есть данные о местоположении доступны. Таким образом, вы можете иметь: = нуль проверить, как это

if(map.getMyLocation() !=null){ 
    lat = map.getMyLocation().getLatitude(); 
    lng = map.getMyLocation().getLongitude(); 
} 

Также этот метод устарел, поэтому вместо этого вы должны использовать FusedLocationProviderApi. См. Официальную документацию here

Here - очень хорошая реализация FusedLocation Api, вы можете это проверить.

+0

Я понимаю, что нулевые, но почему? Мне нужно получить широту и долготу. По какой причине это будет null? – WeVie

+0

Возможно, у вас отключены ваши службы определения местоположения или могут быть другие причины, по которым карта Google не может найти ваше текущее местоположение. –

+0

Есть ли разрешение, которое мне нужно добавить, возможно, я пропустил? – WeVie

0
public void turnGPSOn() { 

     String provider = Settings.Secure.getString(getContentResolver(), 
       Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
     if (!provider.contains("gps")) { 
      final Intent poke = new Intent(); 
      poke.setClassName("com.android.settings", 
        "com.android.settings.widget.SettingsAppWidgetProvider"); 
      poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
      poke.setData(Uri.parse("3")); 
      sendBroadcast(poke); 
     } 
    } 


void getLocation() 
{ 
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
        if (!locManager 
          .isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
         turnGPSOn(); 
        } 

        try { 
         locManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 1000, 10, 
           locationListener); 

        } catch (Exception ex) { 

        } 

       } 


} 
private final LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      updateWithNewLocation(location); 
     } 

     public void onProviderDisabled(String provider) { 
      updateWithNewLocation(null); 
     } 

     public void onProviderEnabled(String provider) { 
     } 

     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    }; 

private void updateWithNewLocation(Location location) { 
     String latLongString = ""; 
     try { 
      if (location != null) { 

       Log.e("test", "gps is on send"); 
       latitude = Double.toString(location.getLatitude()); 
       longitude = Double.toString(location.getLongitude()); 


       Log.e("test", "location send"); 


       latLongString = "Lat:" + latitude + "\nLong:" + longitude; 
       Log.w("CurrentLocLatLong", latLongString); 
      } else { 
       latLongString = "No location found"; 
      } 
     } catch (Exception e) { 
     } 

    } 
2

Попробуйте это:

public Double Lat = null; 
public Double Lng = null; 
String LatLng = null; 
private LocationClient mLocationClient; 

в вашем onCreateView() добавить

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.yourLayout, container, false); 
     mLocationClient = new LocationClient(getActivity(), this, this); 

rootView.findViewById(R.id.ATestButton).setOnClickListener(
     // Get the current location 
       Location currentLocation = mLocationClient.getLastLocation(); 
       Lat = currentLocation.getLatitude(); 
       Lng = currentLocation.getLongitude(); 
       LatLng = Double.toString(Lat) + "," + Double.toString(Lng); 
       Toast.makeText(getActivity(), LatLng, 0).show(); 
       }); 

Посмотрите на мое полное github для рабочего примера.

// Я бы проверил кнопку, чтобы ее можно было щелкнуть, чтобы узнать, не возвращается ли что-либо.

+0

Это вызывает у меня такую ​​же проблему. У меня должно быть что-то еще. Думаю, мне нужно просмотреть все разрешения и все остальное и убедиться, что я ничего не пропустил. – WeVie

+0

Я до сих пор не понял этого. Что действительно означает пень, так это то, что следующая строка работает и устанавливает мое текущее местоположение: 'map.setMyLocationEnabled (true);' – WeVie

+1

Помните, что диспетчер местоположений отличается от использования карт Google. Вы можете получить lat и lng из диспетчера местоположений, а затем использовать его по своему усмотрению. Возможно, вам стоит подумать о работе. – SeahawksRdaBest

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