Android系统层屏蔽弹出停止运行对话框

项目场景:

车载项目,ATC8257-Android9.0系统平台,福田汽车P3系列项目

项目使用高德公版地图前提是无法获得任何高德定制服务,每次刷完机去切换语言系统会弹出"高德地图已停止运行"弹窗,严重影响用户使用体验


问题描述

项目使用高德公版地图前提是无法获得任何高德定制服务,每次刷完机去切换语言系统会弹出"高德地图已停止运行",但是刷完机先把高德打开一次再去切换语言就不会有这个问题,报错内容如下:
弹窗报错

07-02 16:17:41.637  4482  4482 D AndroidRuntime: Shutting down VM
07-02 16:17:41.638  4482  4482 E AndroidRuntime: FATAL EXCEPTION: main
07-02 16:17:41.638  4482  4482 E AndroidRuntime: Process: com.autonavi.amapauto, PID: 4482
07-02 16:17:41.638  4482  4482 E AndroidRuntime: java.lang.UnsatisfiedLinkError: No implementation found for void com.autonavi.amapauto.utils.LanguageUtils.nativeNotifyLangChange(java.lang.String) (tried Java_com_autonavi_amapauto_utils_LanguageUtils_nativeNotifyLangChange and Java_com_autonavi_amapauto_utils_LanguageUtils_nativeNotifyLangChange__Ljava_lang_String_2)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at com.autonavi.amapauto.utils.LanguageUtils.nativeNotifyLangChange(Native Method)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at com.autonavi.amapauto.utils.LanguageUtils.notifyLanageChange(LanguageUtils.java:4)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at com.autonavi.amapauto.common.LanguageChangeReceiver.onReceive(LanguageChangeReceiver.java:4)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3410)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.app.ActivityThread.access$1300(ActivityThread.java:206)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1689)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:193)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6702)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-02 16:17:41.638  4482  4482 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994)

原因分析:

验证过刷完机先把高德打开一次再去切换语言就不会有这个问题,结合上面报错内容,分析是刷完机后高德接收语言切换的广播代码没有主动完成初始化,当系统切换语言的广播发送后高德无法处理导致弹出“高德地图已停止运行”弹窗。


解决方案:

授人以鱼不如授人以渔

1.既然出现这种系统弹窗,我思索的是能不能在系统里面把高德包名过滤掉,弹窗的地方先获取包名是高德包名就return,有了这种思路后第一步还是借助万能网络,很自然就搜到这篇CSDN博客
屏蔽弹出停止运行对话框
修改位置:frameworks\base\services\core\java\com\android\server\am\AppErrors.java
这篇博客给出了修改方法,但是并没有说在具体哪个代码块里面改,我们通过里面的mService.killAppAtUsersRequest(proc, null)这行代码去AppErrors.java里面搜索,发现handleShowAnrUi方法里面有一处,按照博客的方法这样加

    void handleShowAnrUi(Message msg) {Slog.w(TAG, "------------------handleShowAnrUi");Dialog dialogToShow = null;synchronized (mService) {//此处省略部分系统代码if(dialogToShow != null){// For don't show gaode-map <Stop running> dialog Slog.w(TAG, "------------------handleShowAnrUi ");if(proc != null && proc.info.packageName.equals("com.autonavi.amapauto")){Slog.w(TAG, "------------------Current app is gaode map, don't show <Stop running> dialog");dialogToShow = null;// Just kill the app if there is no dialog to be shown.mService.killAppAtUsersRequest(proc, null);}}}// If we've created a crash dialog, show it without the lock heldif (dialogToShow != null) {dialogToShow.show();}}

从上面博客里知道修改的位置是frameworks\base\services\core\java\com\android\server\am\AppErrors.java,修改后我们可以在Android目录下单编这个模块

android$ mmm frameworks/base/services

编译好后去out/target/product/ac8257_demo/system/framework/目录里面找services.jar,然后推到机器system/framework/下面替换原来的,reboot后执行切换语言高德仍然弹窗报错,查看我们加在handleShowAnrUi方法里面的打印没走,但是看另一条打印

01-01 08:01:01.931   589   748 I AppErrors: Showing crash dialog for package com.autonavi.amapauto u0

2.照例去AppErrors.java里面搜关键字,发现这条打印在handleShowAppErrorUi方法里面,遂在该方法里面添加代码如下

    void handleShowAppErrorUi(Message msg) {AppErrorDialog.Data data = (AppErrorDialog.Data) msg.obj;boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;AppErrorDialog dialogToShow = null;final String packageName;final int userId;synchronized (mService) {//此处省略部分系统代码if(dialogToShow != null){// For don't show gaode-map <Stop running> dialogSlog.w(TAG, "handleShowAppErrorUi ------------------");if(proc != null && proc.info.packageName.equals("com.autonavi.amapauto")){Slog.w(TAG, "Current app is gaode map, don't show <Stop running> dialog ------------------");dialogToShow = null;// Just kill the app if there is no dialog to be shown.mService.killAppAtUsersRequest(proc, null);}}}// If we've created a crash dialog, show it without the lock heldif (dialogToShow != null) {Slog.i(TAG, "Showing crash dialog for package " + packageName + " u" + userId);dialogToShow.show();}}

执行单编services.jar后推到机器,重启切换语言没有"高德地图已停止运行"弹窗了

3.后面考虑到高德地图用的公版,如果出现anr我们也得不到任何支援,所以把handleShowAnrUi和handleShowAppErrorUi两处屏蔽高德报错弹窗的代码都保留了,复盘方法名handleShowAnrUi明显就是应用出现anr时弹窗的位置。

总结:絮絮叨叨的写这么多,实际是想更详尽的说明我的解决思路,套用前辈的一句话——编程是一种思维,编程思维需要慢慢培养。
所以我的博客都会详细的说明我的解决过程,过程中遇到了那些问题,遇到问题要怎么转换思路,大概如是……

-----------------------毕竟授人以鱼不如授人以渔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第三版 系统集成项目管理工程师】第6章 数据工程

持续更新。。。。。。。。。。。。。。。 【第三版】第六章 数据工程 6.1数据采集和预处理6.1.1 数据采集 P2346.1.2 数据预处理6.1.3 数据预处理方法1.缺失数据的预处理-P2352.异常数据的预处理-P2363.不一致数据的预处理-P2364.重复数据的预处理-P2365.格式不符数据的预处理…

UE5 03-物体碰撞检测

在你需要碰撞的物体上添加一个碰撞检测组件 碰撞预设 设置为NoCollision,这样移动过程中就不会有物理碰撞阻挡效果,只负责检测是否碰撞,比较难解释,如果学过Unity的话,可以把它理解成 Collision 为 Trigger

My sql 安装,环境搭建

以下以MySQL 8.0.36为例。 一、下载软件 1.下载地址官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Community Server 4.点击Archives选择合适版本 5.选择后下载第二个…

密码学复习

目录 基础 欧拉函数 欧拉函数φ(n)定义 计算方法的技巧 当a=a_1*a_2*……*a_n时 欧拉定理 剩余系 一些超简单密码 维吉尼亚 密钥fox 凯撒(直接偏移) 凯特巴氏(颠倒字母表) 摩斯密码(字母对应电荷线) 希尔(hill)密码 一些攻击 RSA 求uf+vg=1 快速幂模m^…

Python | Leetcode Python题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; class Solution:def rob(self, nums: List[int]) -> int:def robRange(start: int, end: int) -> int:first nums[start]second max(nums[start], nums[start 1])for i in range(start 2, end 1):first, second second, max(fi…

Bootstrap 图片

Bootstrap 图片 Bootstrap 是一个流行的前端框架,它提供了一套丰富的工具和组件,用于快速开发响应式和移动优先的网页。在本文中,我们将探讨如何使用 Bootstrap 来处理和展示图片,包括图片的响应式设计、图片样式和图片布局。 响应式图片 Bootstrap 通过其栅格系统提供了…

人工智能在物流领域的应用,智慧物流大有可为!

物流是复合型服务产业&#xff0c;作为经济的重要组成部分&#xff0c;受到人工智能技术的深刻影响。物流行业的人工智能应用也将助推人工智能技术的发展&#xff0c;人工智能技术应用于物流行业&#xff0c;应用领域包括以下方向&#xff1a; 第一、车货匹配系统 使用人工智…

AI智能音箱用2×15W立体声功放芯片NTP8918

智能音箱是近年来非常受欢迎的智能家居产品之一&#xff0c;它集成了人工智能技术和音频技术&#xff0c;能够为用户提供语音助手、音乐播放、智能家居控制等多种功能。其中&#xff0c;音频输出是智能音箱的核心功能之一&#xff0c;而功放芯片则是实现音频放大的关键组成部分…

00 如何根据规律在变化中求发展?

你好&#xff0c;我是周大壮。目前&#xff0c;我已在搜索推荐等算法技术领域从事研发近 10 年&#xff0c;做过诸多流量分发领域的算法技术工作。 如今任公司同城的算法架构师、技术委员会人工智能分会委员、公司本地服务事业群算法策略部负责人&#xff0c;我主要负责公司集…

计算机网络之局域网

目录 1.局域网的基本概念 2.LAN的特性 3.局域网特点 4.拓扑结构 5.传输媒体的选择 6.传输媒体 7.传输技术 8.传输技术距离问题 9.LAN的逻辑结构 10.局域网工作原理 上篇文章内容&#xff1a;OSI七层体系结构 1.局域网的基本概念 局域网 是将分散在有限地 理范围内&…

51单片机定时器/计数器

欢迎入群共同学习交流 时间记录&#xff1a;2024/7/3 一、电路原理图 51单片机具有两个定时器T0、T1 二、知识点介绍 1、寄存器介绍 &#xff08;1&#xff09;TMOD方式寄存器 T0为例介绍&#xff1a; 工作方式选择位M1、M0 常用方式为方式1、方式2&#xff0c;方式2低…

【按键精灵】#1找图、找色、移动和点击

关键字&#xff1a; 找图、找色、移动和点击 找图&#xff1a; 抓抓截图&#xff0c;添加到附件 FindPic 0,0,1024,768,"Attachment:\Xmind.bmp",0.9,intX,intYIf intX > 0 And intY > 0 Then TracePrint "找到了" //找到打印Else TracePri…

Python | Leetcode Python题解之第214题最短回文串

题目&#xff1a; 题解&#xff1a; class Solution:def shortestPalindrome(self, s: str) -> str:n len(s)fail [-1] * nfor i in range(1, n):j fail[i - 1]while j ! -1 and s[j 1] ! s[i]:j fail[j]if s[j 1] s[i]:fail[i] j 1best -1for i in range(n - 1,…

宠物商城系统7000字文档20页ppt java项目javaweb项目ssm项目jsp项目java课程设计java毕业设计

文章目录 宠物商城系统一、项目演示二、项目介绍三、7000字项目文档四、20页ppt五、部分功能截图六、部分代码展示七、底部获取项目源码带7000字文档和20页ppt&#xff08;9.9&#xffe5;带走&#xff09; 宠物商城系统 一、项目演示 宠物商店 二、项目介绍 语言: Java 数据…

Echarts折线图

实现效果&#xff1a; 代码&#xff1a; <template><div class"echarts"><div class"select-box"><div v-for"(item,index) in trendList":key"index":class"[period item.id?active:,item]"click&…

PyMuPDF 操作手册 - 08 API - Document属性方法和简短说明

文章目录 https://pymupdf.readthedocs.io/en/latest/document.html#Document 方法/属性简短描述Document.add_layer()仅限 PDF:进行新的可选内容配置Document.add_ocg()仅限 PDF:添加新的可选内容组Document.authenticate()访问加密文档Document.bake()仅限 PDF:将…

Spring Boot集成geode快速入门Demo

1.什么是geode&#xff1f; Apache Geode 是一个数据管理平台&#xff0c;可在广泛分布的云架构中提供对数据密集型应用程序的实时、一致的访问。Geode 跨多个进程汇集内存、CPU、网络资源和可选的本地磁盘&#xff0c;以管理应用程序对象和行为。它使用动态复制和数据分区技术…

【C++】类和对象(中)--上篇

个人主页~ 类和对象上 类和对象 一、类的六个默认成员函数二、构造函数1、构造函数基本概念2、构造函数的特性 三、析构函数1、析构函数的概念2、特性 四、拷贝构造函数1、拷贝构造函数的概念2、特征 一、类的六个默认成员函数 如果有个类中什么成员都没有&#xff0c;那么被称…

数据库安装

1.选择最下面自定义安装 2.选择x64 3.next 4.完成后next 5.next 6.选择如图&#xff0c;next 7.如图 8.输入密码 9.如图 10.如图 11.安装 12.完成 13.控制面板选择系统和安全 14.选择系统 15.高级系统设置 16.环境变量 17.双击打开path 18.新建 19.输入MySQLbin文件夹路径 20.管…

firewalld(4) Rich Rule

简介 前文介绍了firewall基本原理&#xff0c;基础的命令使用、保存、以及zone的配置&#xff0c;前面文章我们在配置zone的时候有些复杂的条件&#xff0c;比如限速、日志记录等并不能直接在zone中进行配置。本篇文章主要介绍richlanguage&#xff0c;它能提供更加丰富的策略配…