2016-09-16 43 views
0

我需要的GPS座標,我有以下幾點:版本的Android M - GPS onLocationChanged問題

public class Splash extends AppCompatActivity implements LocationListener { 

SessionManagement sessionManagement; 
private Intent i; 

static final Integer LOCATION = 0x1; 
static final Integer GPS_SETTINGS = 0x7; 

GoogleApiClient client; 
LocationRequest mLocationRequest; 
PendingResult<LocationSettingsResult> result; 
LocationManager locationManager; 
String mProvider; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 

    askForPermission(Manifest.permission.ACCESS_FINE_LOCATION, LOCATION); 
    client = new GoogleApiClient.Builder(this) 
      .addApi(AppIndex.API) 
      .addApi(LocationServices.API) 
      .build(); 

    //locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    //Criteria criteria = new Criteria(); 
    //mProvider = locationManager.getBestProvider(criteria, false); 
} 

@Override 
public void onLocationChanged(Location location) { 

    String msg = "New Latitude: " + location.getLatitude() 
      + "New Longitude: " + location.getLongitude(); 

    Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show(); 
} 

private void askForPermission(String permission, Integer requestCode) { 
    if (ContextCompat.checkSelfPermission(Splash.this, permission) != PackageManager.PERMISSION_GRANTED) { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(Splash.this, permission)) { 

      ActivityCompat.requestPermissions(Splash.this, new String[]{permission}, requestCode); 

     } else { 

      ActivityCompat.requestPermissions(Splash.this, new String[]{permission}, requestCode); 
     } 
    } else { 
     Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    client.connect(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    client.disconnect(); 
} 

private void askForGPS(){ 
    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setInterval(30 * 1000); 
    mLocationRequest.setFastestInterval(5 * 1000); 
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest); 
    builder.setAlwaysShow(true); 

    result = LocationServices.SettingsApi.checkLocationSettings(client, builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      Log.e("LOCATION", result.toString()); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        try { 
         status.startResolutionForResult(Splash.this, GPS_SETTINGS); 
        } catch (IntentSender.SendIntentException e) { 

        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        break; 
      } 
     } 
    }); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED){ 
     switch (requestCode) { 
      //Location 
      case 1: 
       askForGPS(); 
       break; 
     } 
     Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show(); 
    }else{ 
     Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); 
    } 
} 

}

它似乎onLocationChanged從來沒有發射。我究竟做錯了什麼?這是我第一次與checkPermission。 清單有互聯網和ACCESS_FINE_LOCATION

任何人都可以幫助我嗎?非常感謝,提前感謝。

回答

0

您需要給予運行時權限,在Android M和更高版本的Android中,您需要爲運行時權限授予您的應用程序。

現在,您在AndroidManifest.xml中是否聲明瞭權限並不重要。

您可以查閱此鏈接以供參考大約Android Runtime permissions.

+0

我做到了。它要求運行時權限和運行時檢查給予我許可 – Nonjoe