ActivityCompat.requestPermissions不显示提示
我正在尝试请求ACCESS_FINE_LOCATION
权限以获取用户的当前位置。
我的日志记录表明,在查询ContextCompat.checkSelfPermission()
时,我的应用当前没有此权限,但是在不调用ActivityCompat.requestPermissions()
任何内容时,则显示。
我的Google地图代码(实现OnMapReadyCallback
和ActivityCompat.OnRequestPermissionsResultCallback()
)位于中FragmentActivity
。
我设法使该requestPermissions()
功能在该应用程序的其他“活动”中成功运行,这只是带有Google地图的功能。将其放在或中的onCreate()
方法Activity
中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地图异步调用权限请求有关?
回答:
在完全删除我的类并且仍然无法正常工作之后,我意识到此Activity是使用TabHost实例化的。
当我停止使用TabHost时,提示会成功显示。我猜新的权限提示不支持TabHosts-这是一个错误吗?
我最终创建了一个PermissionsRequestActivity,它代表我的TabHost处理许可请求和响应,然后退出(通过Intent
extras捆绑包传递请求的许可信息)。
它将响应以广播的形式传递回请求,由我的TabHost接收。
有点破解,但工作正常!
以上是 ActivityCompat.requestPermissions不显示提示 的全部内容, 来源链接: utcz.com/qa/433568.html