2016-12-17 4 views
0

Я хочу получить местоположение устройства при запуске приложения.Не удалось получить местоположение на Android

Я просматривал документы, пытаясь понять, что пойдет не так, но я не могу найти его. onLocationChanged никогда не вызывается.

private void getLocation() { 
    // Connected to Google API 

    // Create location request with minimum interval of a minute, and normal of an hour 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setPriority(PRIORITY_BALANCED_POWER_ACCURACY); 
    mLocationRequest.setFastestInterval(1000 * 60); 
    mLocationRequest.setInterval(1000 * 60 * 60); 

    // Request permissions 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{"ACCESS_FINE_LOCATION"}, MY_PERMISSION_LOCATION_CODE); 
     return; 
    } 

    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSION_LOCATION_CODE: { 
      if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { 

       if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        return; 
       } 
       LocationServices.FusedLocationApi.requestLocationUpdates(
         mGoogleApiClient, mLocationRequest, this); 
      } 
      else { 
       TextView loading = (TextView)findViewById(R.id.connecting_text); 
       loading.setText("Please enable Location under Settings > Apps > Beet > Permissions."); 
       loading.setTextSize(20); 
      } 
      break; 
     } 
    } 
} 

public void onLocationChanged(Location location) { 
    System.out.println("GETLOCATION1 ________________"); 
    mLastLocation = location; 
    System.out.println(location.getLatitude() + " - " + location.getLongitude() + " ________________"); 
} 
+0

попробовать отлаживать код, 'onRequestPermissionsResult' является получением вызванный или нет, и проверка разрешена. –

+0

Достигнут конец «getLocation». –

+0

попытайтесь отладить все точки в моем комментарии выше, если 'onRequestPermissionsResult' не получится вызвать что-то неправильное с вашим кодом разрешения, но вы должны сузить проблему, например, о разрешении или местоположении, и попытаться также просмотреть логарифм –

ответ

0

Попробуйте получить разрешение, как это: она работает в моем случае

if (!checkIfAlreadyhavePermission()) { 
      ActivityCompat.requestPermissions(this, new String[]{"ACCESS_FINE_LOCATION"}, MY_PERMISSION_LOCATION_CODE); 
     } 

private boolean checkIfAlreadyhavePermission() { 
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); 
    return result == PackageManager.PERMISSION_GRANTED; 
} 

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSION_LOCATION_CODE: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Call_location_updates(); 
      } else { 
       Toast.makeText(getApplicationContext(), getResources().getString(R.string.gps_permission), Toast.LENGTH_LONG).show(); 
       finish(); 
      } 
      break; 
     } 
     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

создать Также ваш LocationRequest объект, как это:

private final int INTERVAL = 5000; 
private final int FAST_INTERVAL = 1000; 

protected void createLocationRequest() { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(INTERVAL); 
    mLocationRequest.setFastestInterval(FAST_INTERVAL); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
} 

protected synchronized void buildGoogleApiClient() { 

    mGoogleApiClient = new GoogleApiClient.Builder(context) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API).build(); 

} 



public void Call_location_updates(){ 
     Location location = LocationServices.FusedLocationApi 
        .getLastLocation(mGoogleApiClient); 
      if (location != null) { 
       onLocationChanged(location); 
      } 
      LocationServices.FusedLocationApi.requestLocationUpdates(
        mGoogleApiClient, mLocationRequest, this); 

} 

@Override 
    public void onLocationChanged(Location location) { 
     //do what u want with location 
    } 
Смежные вопросы