当前位置: 首页 > 面试题库 >

ActivityCompat.requestPermissions不显示提示

翟鹏
2023-03-14
问题内容

我正在尝试请求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接收。

有点破解,但工作正常!



 类似资料:
  • 我在远程服务器上有一个git repo,并使用ssh和密码身份验证来克隆、拉、推。从命令行,一切正常。 但是在 vscode 中,当我尝试从远程存储库拉取或推送时,没有显示密码提示。Vscode似乎在等待什么,但什么也没发生。这是一个错误,还是我做错了什么? 我想在linux上使用visualstudio代码作为git客户端。 从命令行: 在vscode中:

  • gdb在退出时会提示: A debugging session is active. Inferior 1 [process 29686 ] will be killed. Quit anyway? (y or n) n 如果不想显示这个信息,则可以在gdb中使用如下命令把提示信息关掉: (gdb) set confirm off 也可以把这个命令加到.gdbinit文件里。

  • $ gdb GNU gdb (GDB) 7.7.50.20140228-cvs Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are f

  • ap.showToast(OPTION | content, CALLBACK) 显示弱提示。可选择多少秒之后消失。可直接传入一个字符串作为 OPTION.content 参数。 OPTION 参数说明 名称 类型 必填 描述 content String 是 文字内容 type String 否 toast 类型,展示相应图标,默认 none,支持 success / fail / except

  • 我尝试在viewDidLoad()中运行以下代码,如果我从Xcode构建并运行它,该应用程序可以正确显示评级提示,但如果我在iPhone上手动运行该应用程序,那么评级提示就不显示了。这是为什么? 我的系统是:iOS 14.4.1,Xcode 12.4 另外,如果我只是将这行代码放在viewDidLoad()中,那么我就没有这个问题:

  • 问题内容: 我使用命令:运行docker图像,但它不显示颜色输出。如果我还是再次运行,则输出将正确地以彩色输出。 重击提示图像 我的bash_profile和bash_prompt 问题答案: 该OP SolomonT报道称,有做的工作: 和费尔南多·科雷亚增加的评论: 为了同时获得色彩支持和工作,我结合了两个示例: 正如chepner所评论(较早的回答)那样,由于是由调用的,因此是来源(属于交互