【发布时间】:2017-06-23 00:03:57
【问题描述】:
如果用户授予权限,则会创建一个后台服务来开始跟踪用户位置。
后台服务会持续跟踪用户的位置,即使在用户销毁应用程序后也是如此。
但是如果用户去应用程序设置并删除位置权限然后服务崩溃并给出以下错误消息,
java.lang.SecurityException: 客户端必须有 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限来执行任何位置操作。
该服务每 10 秒运行一次,请指导我如何在运行服务中检查它是否具有权限,因为它每 10 秒运行一次服务并调用 onLocationChanged 方法。
public class UpdateService extends Service implements
LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
@Override
public void onCreate() {
super.onCreate();
if (isGooglePlayServicesAvailable()) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: ");
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(10000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
super.onStartCommand(intent, flags, startId);
return START_STICKY ;
}
@Override
public void onLocationChanged(Location location) {
saveLocationand(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude()));
}
编辑:
这就是我在应用程序启动中检查权限的方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
showGPSDisabledAlertToUser();
}
startService(new Intent(MainActivity.this, UpdateService.class));
} else
checkLocationPermission();
}
【问题讨论】:
-
很明显,如果您使用
remove location permission,那么应用程序将无法运行。
标签: android android-layout android-fragments android-service android-permissions