草庐IT

安卓 M : System permission vs WebView location permission

coder 2023-12-28 原文

我有一个 WebView,加载的某些页面需要 GeolocationPermissions 的权限。为此,我覆盖了 onGeolocationPermissionsShowPrompt()。好的。

此外,我的应用程序以新权限模型的 SDK 23 (Android M) 为目标。因此,我需要检查用户是否授予了 ACCESS_FINE_LOCATION 权限,如果没有,则显示一个询问权限的对话框。

如何只为需要 GeolocationPermissions 的页面显示该对话框?

回调 onPermissionRequest(PermissionRequest request) 没有被调用。

安卓 list :

WebView 回调

@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    callback.invoke(origin, true, true);
    super.onGeolocationPermissionsShowPrompt(origin, callback);
}

@Override
public void onPermissionRequest(PermissionRequest request) {
    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
        requestLocationPermission();
    else {
        super.onPermissionRequest(request);
    }

显示对话框权限

private void requestLocationPermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
      new ADPDialogFragment(getActivity()) {
        @Override
        public String getTitre() {
            return getString(R.string.mob_he_configuration_dialogue_message_titre);
        }

        @Override
        public String getMessage() {
            return getString(R.string.permission_location_rationale);
        }

        @Override
        public void doPositiveClick() {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
        }
    }.show(getFragmentManager(), TAG);
} else {
    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
}

权限回调

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    if (requestCode == REQUEST_LOCATION) {
        // BEGIN_INCLUDE(permission_result)
        // Received permission result for camera permission.
        Log.i(TAG, "Received response for Camera permission request.");

        // Check if the only required permission has been granted
        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Camera permission has been granted, preview can be displayed

        } else {
            Toast.makeText(getActivity(), getString(R.string.permissions_not_granted), Toast.LENGTH_SHORT).show();

        }
        // END_INCLUDE(permission_result)

    } else {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

感谢您的帮助!

最佳答案

您可以在调用 onGeolocationPermissionsShowPrompt 时请求用户的许可:

@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
        mCallback = callback;
        mOrigin   = origin;
        requestLocationPermission();
    } else {
        callback.invoke(origin, true, true);
    }
}

以及当用户选择是否授予您权限时:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String[] permissions,
                                       @NonNull int[] grantResults)
{
    switch (requestCode) {
    case REQUEST_LOCATION:
        if (mCallback != null && mOrigin != null)
            mCallback.invoke(mOrigin,
                             grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED,
                             false);
        mCallback = null;
        mOrigin   = null;
        break;

    default:
        super.onRequestPermissionsResult(requestCode, permissions,
                                         grantResults);
    }
}

关于安卓 M : System permission vs WebView location permission,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659725/

有关安卓 M : System permission vs WebView location permission的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  3. ruby-on-rails - bundle : Permission denied - 2

    我将服务器更新为ruby​​2.1.1,并使用Capistrano部署到我的服务器。但是,当我部署时,我收到各种错误。每次我玩我的部署代码时都会改变。以下是我当前遇到的问题。更新/新问题重新安装rvm和ruby​​后,我在部署时遇到了不同的问题。这是我当前的deploy.rb文件。require"bundler/capistrano"require"rvm/capistrano"set:rvm_type,:systemset:rvm_ruby_string,"ruby-2.1.1"require'bundler/capistrano'#Capistranoset:default_env

  4. ruby - 带有 OAuth2 : update and delete fail with "Insufficient Permission" error 的 YouTube API v3 - 2

    我正在尝试使用YouTubeAPIv3来更新和删除视频与OAuth2forauthentication通过google-api-client(0.6.4)Rubygem。但是,当我尝试执行这两个操作中的任何一个时,我看到以下错误消息:Google::APIClient::ClientError:InsufficientPermission奇怪的是:使用与update和delete完全相同的身份验证过程,我可以insert(上传)成功,没问题!所以,我不认为这是我的身份验证设置的问题,而是我代码中的其他地方。我的读写scope在所有这些操作中始终相同:https://www.google

  5. ruby-on-rails - 为什么在安装 Rails 时出现 "write permission"错误? - 2

    当我使用rvmuse1.9.2时,我得到Railsv3.0.0:vikas@admin1-DL-H61MXEL:~$rvmuse1.9.2--defaultUsing/home/vikas/.rvm/gems/ruby-1.9.2-p320vikas@admin1-DL-H61MXEL:~$rails-vRails3.0.0当我使用rvmuse2.0.0时,我得到Railsv3.2.13:vikas@admin1-DL-H61MXEL:~$rvmuse2.0.0Using/home/vikas/.rvm/gems/ruby-2.0.0-p195vikas@admin1-DL-H61MX

  6. ruby - 在 windows 上 rake : bad interpreter: permission denied - 2

    我安装了JRuby和Gitforwindows。然后我使用RubyInstaller安装了Ruby2.3x64。然后我安装了x64devkit。我安装了jsongem,它运行正常。运行rake--version给我错误:bash:/c/Ruby23-x64/bin/rake:C:/Users/Justin/Projects/rubyinstaller/sandbox/ruby23_mingw/bin/ruby.exe:错误的解释器:权限被拒绝我的名字不是Justin,我的计算机或网络上没有叫Justin的用户,我什至没有任何叫Justin的friend。是什么导致了这个问题?

  7. ruby - pg_dump : [archiver (db)] query failed: ERROR: permission denied for relation abouts - 2

    我正在尝试转储我的pgdb但遇到这些错误请建议pg_dump:[archiver(db)]queryfailed:ERROR:permissiondeniedforrelationaboutspg_dump:[archiver(db)]querywas:LOCKTABLEpublic.aboutsINACCESSSHAREMODE 最佳答案 您正在执行pg_dump的用户没有公共(public)模式的权限。如果允许则添加权限:GRANTUSAGEONSCHEMApublicTO;GRANTSELECTONALLTABLESINSCH

  8. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  9. ruby-on-rails - 旧 Rails 应用程序出现奇怪的 Rails 错误 "permission denied: bin/rails" - 2

    每当我运行rails(或任何rails命令)时,我都会收到此错误_rails_command:2:权限被拒绝:bin/rails仅当我在一些旧的rails应用程序目录中时。在这些目录中,bundleexecrailsc命令有效,但rails甚至rails-v无效。背景:我将我的编码工作区保存在保管箱文件夹中。现在我最近安装了Manjaro,因此我从以前的操作系统下载的所有Rails应用程序我称之为旧Rails应用程序。简而言之:除了旧的Rails应用程序外,Rails在任何地方都可以正常工作。bundleexecrailsc工作正常。我试过的Ruby版本:2.0.0(rvm),2.1.

  10. ruby-on-rails - ruby rails : permission denied when using "rails generate controller welcome" - 2

    我在RedHat服务器上使用RubyonRails。当我试图生成一个Controller文件时,我得到了这个错误:[ec2-user@ip-172-31-22-128testApp4]$railsgeneratecontrollerwelcome/home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in`initialize':Permissiondenied@rb_sysopen-/tmp/spring/fea371aaf9d69cfa58bd12f69b3f1bf6.pid(Err

随机推荐