• 问题

最近项目中内嵌了谷歌框架,但是每次升级后都会弹窗申请高精度定位和定位权限申请等弹窗,如下图所示;需求是要去掉此弹窗。

  • 高精度定位申请弹窗

  • 定位权限申请

  • 思路
  1. 先确认弹窗的应用,执行指令获取当前窗口应用 dumpsys window | grep mCurrentFocus
  • 高精度弹窗
mCurrentFocus=Window{90ef9e7 u0 com.google.android.gms/com.google.android.location.network.ConfirmAlertActivity}
//com.google.android.gms 应用的 com.google.android.location.network.ConfirmAlertActivity
//GMS
  • 定位权限弹窗
mCurrentFocus=Window{f5d1317 u0 com.google.android.gsf/com.google.android.gsf.settings.ConfirmLgaaylActivity}
//com.google.android.gsf 应用的 com.google.android.gsf.settings.ConfirmLgaaylActivity
//GoogleServicesFramework
  1. 由于第三方的APP内部弹窗,不能直接修改代码逻辑;因为是权限相关的弹窗,尝试直接默认授予相关权限,修改DefaultPermissionGrantPolicy.java,直接默认授予定位权限
    路径: frameworks\base\services\core\java\com\android\server\pm\permission\DefaultPermissionGrantPolicy.java
private void grantDefaultSystemHandlerPermissions(PackageManagerWrapper pm, int userId) {...
//GMSif(pm.getPackageInfo("com.google.android.gms")!=null){grantPermissionsToSystemPackage(pm, "com.google.android.gms", userId,ALWAYS_LOCATION_PERMISSIONS);}//GoogleServicesFrameworkif(pm.getPackageInfo("com.google.android.gsf")!=null){grantPermissionsToSystemPackage(pm, "com.google.android.gsf", userId,ALWAYS_LOCATION_PERMISSIONS);}//Carrier Servicesif(pm.getPackageInfo("com.google.android.ims")!=null){grantPermissionsToSystemPackage(pm, "com.google.android.ims", userId,ALWAYS_LOCATION_PERMISSIONS);}//Google Playif(pm.getPackageInfo("com.android.vending")!=null){grantPermissionsToSystemPackage(pm, "com.android.vending", userId,ALWAYS_LOCATION_PERMISSIONS);}...
}
  1. 编译后重新测试,发现还是会弹弹窗;没有办法,只能反编译APP查看具体的弹窗逻辑。这里用的反编译工具 jadx
  • GMS ConfirmAlertActivity(GmsCore_am.apk)

如下图所示,代码中是通过 network_location_opt_in 属性判断是否跳转到ConfirmAlertActivity 弹窗。

uri值为public static final Uri a = Uri.parse("content://com.google.settings/partner");

  • GoogleServicesFramework ConfirmLgaaylActivity(GoogleServicesFramework_default.apk)

如下图所示,代码是通过use_location_for_services属性判断是否弹窗弹窗。



其uri值为public static final Uri CONTENT_URI = Uri.parse("content://com.google.settings/partner");

  • 解决方案

因为弹窗都是通过属性 network_location_opt_in use_location_for_services 判断,而且属性都是ContentResolver值,uri已知,可以在开机后设置属性来实现屏蔽弹窗。具体代码实现可以在Launcher启动的界面的OnCreate执行,也可以在监听开机广播实现(开机广播有可能滞后),具体实现如下。

private void initGoogleGMSSetting() {if (checkInstalled("com.google.android.gms")) {try {ContentResolver localContentResolver = mContext.getContentResolver();ContentValues localContentValues = new ContentValues();localContentValues.put("name", "network_location_opt_in");localContentValues.put("value", 1);localContentResolver.insert(Uri.parse("content://com.google.settings/partner"), localContentValues);} catch (IllegalArgumentException e) {Log.e("GoogleSettings", "Can't set key " + "network_location_opt_in" + " in " +   "content://com.google.settings/partner", e);}}if (checkInstalled("com.google.android.gsf")) {try {ContentResolver localContentResolver = mContext.getContentResolver();ContentValues values = new ContentValues();values.put("name", "use_location_for_services");values.put("value", 1 + "");localContentResolver.insert(Uri.parse("content://com.google.settings/partner"), values);} catch (IllegalArgumentException e) {Log.e("GoogleSettings", "Can't set key " + "use_location_for_services" + " in " + "content://com.google.settings/partner", e);}}}

AndroidManifest.xml 需要添加 相关权限

<uses-permission android:name="com.google.android.providers.settings.permission.WRITE_GSETTINGS" />

此步骤执行禁止了弹窗弹窗,最后还需默认授予定位权限,具体修改如上面修改。

  • 总结

此方式是有效禁止了弹窗,但是不确定会不会影响Google框架使用需要后续测试发现,如果有更好的方式请多指教。

参考 https://blog.csdn.net/wxd_csdn_2016/article/details/106084389/

Android11 去除Google 框架APP的定位弹窗和高精度申请弹窗相关推荐

  1. qdialog不允许放大缩小弹窗_iOS 13系统太烦人!频繁弹窗提醒App正在定位,竟是为保护隐私?...

    近日,针对iOS 13系统用户频繁收到App追踪消息的弹窗提醒这一问题,苹果回应称,此项更新功能旨在保护用户的隐私,避免被App在后台窃取用户的位置信息并追踪. 据相关媒体报道称,有些开发者担心此项定 ...

  2. Google Web App开发指南

    http://www.html5rocks.com/webappfieldguide/case-studies/case-study-intro/ 第一章:什么是Web Apps? 很多人向我问起学习 ...

  3. Google发布App Engine第二代运行时,提供Python 3.7和PHP 7.2支持

    最近,Google Cloud宣布第二代App Engine标准运行时发布.第二代运行时升级了用于构建应用的Web框架和云计算平台,支持用户使用最新版本的常用语言.框架和软件库运行Web应用,其中包括 ...

  4. qichacha/知乎/国家统计局最新4级地区划/百度地图API获取经纬度/Google play app评论等分数据爬取

    1.企查查数据抓取 1.1 关键公司LOGO # -*-coding:utf-8-*-import pandas as pd import requests import json import ra ...

  5. 如何在Genymotion虚拟设备上安装Google框架(Play,Accounts等)? [重复]

    本文翻译自:How do you install Google frameworks (Play, Accounts, etc.) on a Genymotion virtual device? [d ...

  6. 程序员拒绝春节带电脑回家被开除;小米国行不再支持安装Google框架;Excel具备图灵完备性,成第一大编程语言 | 架构视点...

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Destiny decides who enters your l ...

  7. brew 一直等待_去广告神器,一键去除所有主流App广告,看片从此不等待

    求求各位打开今日第2篇文章,忽略内容,直接拉到底部,然后退出,给花卷赏口饭吃,花卷快饿死了,求求你啦!!!! 大家好,今天小花卷为大家带来的是去广告神器,一键去除所有主流App广告,看片从此不等待 . ...

  8. Android 天气APP(三十一)每日提醒弹窗

    上一篇:Android 天气APP(三十)分钟级降水 效果图 每日提醒弹窗 前言 正文 一.弹窗背景 二.每天第一次弹窗 三.弹出每日提示弹窗 四.弹窗的开关 文末 前言   为了增强用户的体验,所以 ...

  9. 在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享

    在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享: 关于基站定位方面的介绍: http://tech.c114.net/164/a140837.html 开发方面的帮助: h ...

最新文章

  1. C++string容器-字符串拼接
  2. Java技术中的三大特性
  3. 访问修饰符作用范围由大到小是_9个java基础小知识
  4. IPC--进程间通信一(管道)
  5. 孙宇晨终于和巴菲特共进晚餐 还赠送数字币作为见面礼
  6. 手机端java编辑器验证正确_java – 使用编辑器验证表的单元格
  7. bootstrap基础样式学习(一)
  8. 项目管理(二)责任划分
  9. 同态滤波 matlab代码,同态滤波处理光照不均匀图像Matlab代码
  10. 了解计算机PS,PS教程:你应该了解的PS基础绘图工具
  11. 射频中的回波损耗,反射系数,电压驻波比以及S参数的含义和关系
  12. 免费在线的redmine项目演示,提供免费三级域名
  13. 梦想遥不可及,现实寸步不离
  14. POJ 3626 Mud Puddles (BFS)
  15. 深入理解Arduino下的ESP8266_Non-OS_SDK API① Non-OS SDK
  16. 语言-汉语-官话-中原官话-兖菏片:兖菏片
  17. 出现Avoid mutating a prop directly since the value will错误 已解决
  18. oracle数据库闪回详解
  19. P4208 [JSOI2008]最小生成树计数
  20. BZOJ 4416: [Shoi2013]阶乘字符串【状压DP

热门文章

  1. 计算机电脑重置,如果Lenovo计算机无法重置计算机该怎么办
  2. PIL读取图片的形状及变形
  3. 马连道北路1号 Java_丰台这条路被“曝光”后,花了600万,现在已经变成这样......
  4. isAccessible 过时
  5. 如何在苹果笔记本电脑上安装windows系统
  6. 杜邦接口还有一个跟他相反的叫什么_在“考杜拉”和“特卫强”之后,杜邦公司又用一种面料征服了我...
  7. 用java写一个工作日API
  8. Httprequest 获取url 常用方法
  9. 如何求一个字符的ASCII码?
  10. Android仿网易云音乐播放界面