ActivityCompat.requestPermissions不显示提示

我正在尝试请求ACCESS_FINE_LOCATION权限以获取用户的当前位置。

我的日志记录表明,在查询ContextCompat.checkSelfPermission()时,我的应用当前没有此权限,但是在不调用ActivityCompat.requestPermissions()任何内容时,则显示。

我的Google地图代码(实现OnMapReadyCallbackActivityCompat.OnRequestPermissionsResultCallback())位于中FragmentActivity

我设法使该requestPermissions()功能在该应用程序的其他“活动”中成功运行,这只是带有Google地图的功能。将其放在或中的onCreate()方法ActivityonMapReady()(它需要去的地方),该方法不起作用。

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

回到顶部