【发布时间】:2016-09-05 13:10:55
【问题描述】:
我正在尝试请求ACCESS_FINE_LOCATION 权限以获取用户的当前位置。
我的日志显示我的应用在查询ContextCompat.checkSelfPermission()时当前没有此权限,但在调用ActivityCompat.requestPermissions()时没有显示任何内容。
我的 Google 地图代码(实现 OnMapReadyCallback 和 ActivityCompat.OnRequestPermissionsResultCallback())在 FragmentActivity 中。
我已经设法让requestPermissions() 功能在应用程序的其他活动中成功运行,它只是带有谷歌地图的那个。放在Activity 的onCreate() 方法或onMapReady()(它需要去的地方)中时,它不起作用。
if(ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "not granted");
final String[] permissions = new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION};
if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
Log.d(TAG, "rationale");
// Explain to the user why permission is required, then request again
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("We need permissions")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
Log.d(TAG, "request" + android.Manifest.permission.ACCESS_FINE_LOCATION);
// If permission has not been denied before, request the permission
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
} else {
Log.d(TAG, "granted");
}
有什么想法吗?是否与我的 Activity 类 (FragmentActivity) 有关,或者可能是 Google 地图异步调用权限请求?
【问题讨论】:
-
我很惊讶这个编译。
checkSelfPermission()使用LocationActivity.this。第二个requestPermissions()使用PermissionsRequestActivity.this。 -
对不起,我不得不稍微更改我的代码以发布,第二个应该是 LocationActivity.this
-
我一直在尝试在一个单独的 Activity 中创建所有 requestPermissions,但这使得回调变得困难,而且很hacky。
-
FWIW,this sample app 使用运行时权限没有问题。
-
你不应该在清单中指定finelocation吗?或者android在去年发生了彻底的变化?
标签: java android google-maps android-fragments android-permissions