我试图请求 ACCESS_FINE_LOCATION
权限,以获取用户的当前位置。
我的日志表明,在查询 ContextCompat.checkSelfPermission()
时,我的应用目前没有此权限,但在调用 ActivityCompat.requestPermissions()
时没有显示任何内容。
我的 Google 地图代码(实现了 OnMapReadyCallback
和 ActivityCompat.OnRequestPermissionsResultCallback()
)在一个 FragmentActivity
中。
我已经成功地将 requestPermissions()
函数运行到了应用中的其他 Activity 中,只是无法在包含 Google 地图的 Activity 中工作。它不起作用当放置在 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
。 - CommonsWare