【发布时间】:2017-10-17 07:34:50
【问题描述】:
我知道这类问题经常出现在堆栈溢出时。我看过很多有类似问题的帖子,阅读了官方文档,但最后我还是无法理解运行时权限在 android 中是如何工作的。
首先我得到以下错误:
Call requires permissions which may be rejected by user
当我生成 Android Studio 建议的代码时,我得到了:
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
我的第一个问题是:如果我只想使用精细位置,我是否还需要检查粗略位置权限?
接下来我该怎么做?我应该在生成的代码的括号中包含什么?我如何以及在哪里请求权限?
这是我的代码中必须包含权限的部分(mLastLocation 行):
private void displayLocation() {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
double latitude = mLastLocation.getLatitude();
double longitude = mLastLocation.getLongitude();
lblLocation.setText(latitude + ", " + longitude);
} else {
lblLocation.setText("(Couldn't get the location. Make sure location is enabled on the device)");
}
}
AndroidManifest 中定义的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
非常感谢!
【问题讨论】:
标签: android android-permissions