我需要获得gps坐标,我有以下内容:
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
。
清单有INTERNET和ACCESS_FINE_LOCATION
有人能帮帮我吗?非常感谢,提前感谢。
答案 0 :(得分:0)
您需要提供运行时权限,在Android M及更高版本的Android中,您需要为您的应用提供运行时权限。
现在,您在AndroidManifest.xml中声明了权限并不重要。
您可以查看此链接以获取有关Android Runtime permissions.
的参考信息