解决Android8.0中透明Activity锁定方向崩溃问题

2023-10-29

该问题为 Android 8.0 系统 bug。在 8.0 手机上,当应用 targetSdkVersion > 26 时,透明背景的 Activity 如果锁定了屏幕方向,打开该 Activity 就会触发必现的崩溃。触发具体条件为:
①App的targetSdkVersion > 26。
②Activity使用了透明属性的主题:Activity使用的 theme 中 windowIsTranslucent属性为true 或 windowIsFloating属性为true或未配置windowIsTranslucent属性但是windowSwipeToDismiss属性为true。请注意部分常用的系统 theme 也满足条件,例如:@android:style/Theme.Translucent.NoTitleBar、@android:style/Theme.Dialog,以及继承这两个主题的theme。
③Activity强制指定了屏幕方向:
情况1:在 AndroidManifest.xml 中设置了 screenOrientation 属性,并且值为下述的任何一个:landscape、portrait、sensorLandscape、sensorPortrait、reverseLandscape、reversePortrait、userLandscape、userPortrait、locked。
情况2:在Activity的onCreate()中调用了 setRequestedOrientation(int requestedOrientation) 方法,同时requestedOrientation参数为下述的任何一个:ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_PORTRAIT、ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT、ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT、ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT、ActivityInfo.SCREEN_ORIENTATION_LOCKED。(或数字形式:0、1、6、7、8、9、11、12、14)

补充说明:关于 setRequestedOrientation(int requestedOrientation) 方法调用,除了上述提到的位置会出现崩溃外,在其他位置调用此接口将不起作用,即不会进行横竖屏切换。这将影响App功能,也是需要适配的。

Android 8.0 系统Activity.java中的相关源码:

protected void onCreate(@Nullable Bundle savedInstanceState) {
    if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);

    if (getApplicationInfo().targetSdkVersion > O && mActivityInfo.isFixedOrientation()) {
        final TypedArray ta = obtainStyledAttributes(com.android.internal.R.styleable.Window);
        final boolean isTranslucentOrFloating = ActivityInfo.isTranslucentOrFloating(ta);
        ta.recycle();

        if (isTranslucentOrFloating) {
            throw new IllegalStateException(
                    "Only fullscreen opaque activities can request orientation");
        }
    }
    //其他逻辑略
}

解决方案:
1. 对于 theme 满足条件的 Activity,如果此Activity只需要锁定竖屏,没有横竖屏切换的需求,可以将AndroidManifest.xml中screenOrientation属性值改为:behind。
2. 对于 theme 满足条件的 Activity,如果此Activity有横竖屏切换的需求,需要删除AndroidManifest.xml中screenOrientation属性定义,并且删除代码中调用的setRequestedOrientation接口。同时Activity需要能正常处理横竖屏自动切换的情况。(即:点击按钮切换横竖屏功能将失效)
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决Android8.0中透明Activity锁定方向崩溃问题 的相关文章

  • Android自定义控件命名空间问题

    我一直在为 Android 开发自定义控件 尽管我尝试按照建议进行操作here https stackoverflow com questions 4495511 how to pass custom component parameter
  • 如何使用retrofit2进行GET请求?

    我有一个在本地主机上运行的安静的 Web 服务 我想在该剩余 URL 上发出 Retrofit2 GET 请求 MainActivity java private void requestData public static final S
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • BluetoothAdapter.getDefaultAdapter() 不返回 null

    这是我的第一篇文章 所以如果我做了一些愚蠢的事情 请告诉我 这个问题可能看起来与其他帖子类似 但或多或 少与我所看到的所有内容相反 关于该项目的事情 我正在开发 android 4 0 4 4 应用程序 我正在使用蓝牙 我正在运行 andr
  • Android ListView 自定义适配器 ImageButton

    这可能不是正确的方法 如果有更好的方法请告诉我 我创建了一个自定义适配器类 在我的 getView 方法中我膨胀了我想要使用的视图 public View getView int position View convertView View
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 使用 RecyclerView.Adapter 在 onBindViewHolder() 内设置 onItemClickListener

    我有一个自定义对象 学生班 public class Student private String name private String age public String getName return name public void
  • 改造方法调用可能会产生“java.lang.NullPointerException”

    使用 Retrofit 2 3 0 我在 Android Studio 中收到以下消息 有关如何删除此 IDE 错误消息的任何建议 谢谢 来自Response文档 http square github io retrofit 2 x ret
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • 在android中使用BaseActivity的不同活动中的通用标头

    我想编写一次代码并在不同的活动中使用 我创建了一个Base Activity class为了那个原因 此外 不同活动中所有布局的标题都是相同的 我在以下人员的帮助下做到了这一点
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

  • 信息化工程监理规范_赛迪工程咨询出席监理企业信息化管理和智慧化服务现场经验交流会...

    7月21日 中国建设监理协会主办的 监理企业信息化管理和智慧化服务现场经验交流会 在西安召开 来自全国200余名会员代表参加会议 住房和城乡建设部建筑市场监管司副司长卫明 陕西省住房和城乡建设厅副厅长茹广生 中国建设监理协会会长王早生出席会
  • 一文看懂MySQL中order by排序语句的原理

    order by 是怎么工作的 表定义 CREATE TABLE t1 id int 11 NOT NULL city varchar 16 NOT NULL name varchar 16 NOT NULL age int 11 NOT
  • osg 嵌入Qt 窗口

    osg嵌入Qt窗口完整代码的一个示例 include
  • C++ primer 第四版 目录(仅供参考)

    目录 第1章 快速入门 1 1 编写简单的C 程序 1 2 初窥输入 输出 1 3 关于注释 1 4 控制结构 入 1 5 类的简介 1 6 C 程序 小结 术语 第一部分 基本语言 第2章 变量和基本类型 2 1 基本内置类型 2 2 字
  • 【需求解决系列之四】Android App在线自动更新Library(V2.0)

    前言 其实每个Android App都应该有一个App在线更新的功能 这样才能及时的通知用户去更新最新版本的App 这个功能其实说起来比较简单 因为流程大家都懂 但是要真正的实现 还是要考虑很多东西的 因为项目的需要 对之前已经开源的库做了
  • Python将图片嵌入Excel单元格(仿嵌入)

    欢迎来到Python办公自动化专栏 Python处理办公问题 解放您的双手 博客主页 一晌小贪欢的博客主页 该系列文章专栏 Python办公自动化专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎各位佬关注 昨天接到一个需
  • C++之继承

    目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承方式 继承基类成员访问方式的变化 基类和派生类对象赋值转换 切片 切割 继承中的作用域 派生类的默认成员函数 构造函数和析构函数 拷贝构造函数和赋值重载 继承和友元 继承与静态成员
  • 【C++】在子类中怎么调用父类的方法

    2023年8月31日 周四上午 目录 使用父类作用域运算符 子类没有重写父类方法时 子类重写了父类方法时 使用this指针调用 子类没有重写父类方法时 在C 中 子类可以以以下几种方式调用父类的方法 使用父类作用域运算符 这种方法既可以在子
  • 谷歌浏览器启动后,图标变成空白解决办法

    谷歌浏览器启动后 图标变成空白 如下图 解决方法 新建一个文本文档 把如下代码复制进去 并保存 修改这个文本文档的后缀名改为 bat 点击运行即可 taskkill f im explorer exeattrib h i userprofi
  • 搭建SSM框架

    项目结构 1 SSM框架依赖
  • java+selenium打开浏览器实现后台静默运行

    简介 java selenium搭建无界面浏览器 PhantomJS是一个基于Webkit的 无界面 headless 浏览器 它会把网站加载到内存并执行页面上的JavaScript 因为不会展示图形界面 所以运行起来比完整的浏览器更高效
  • 计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?

    网络工作人员经常需要与ip和子网掩码等打交道 相信绝大数的朋友都知道IP的意思 但是还不理解子网掩码的意思 下面装机之家小编来为大家介绍下关于子网掩码的相关知识 希望能够对网络感兴趣的用户有所学习 什么是子网掩码 子网掩码又叫网络掩码 地址
  • 【最详细】node.js执行nodemon app.js命令出错

    nodemon 无法将 odemon 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 所在位置 行 1 字符 1 odemon 无法将 nodemon 项识别为 cmd
  • 自定义docker nginx镜像无容器日志输出

    刚好自己因为工作环境需要自己定制一个nginx镜像 生成之后 发现容器没有相关nginx日志输出 FROM env centos latest COPY nginx repo etc yum repos d 注意 日志要重定向输出到stdo
  • UVM序列篇之二:sequence和item(上)

    无论是自驾item 穿过sequencer交通站 通往终点driver 还是坐上sequence的大巴 一路沿途观光 最终跟随导游停靠到风景点driver 在介绍如何驾驶item和sequence 遵守什么交规 最终可以有序地穿过seque
  • 存储器地址的分段表示及物理地址的计算

    8086 8088 cpu 物理地址需要20位寄存器来存储 但是其内部寄存器都是16位的 不能满足1M字节的寻址要求 为此 引入了 段 的概念 将存储区分成若干段 每段最多为2 16 64K 字节 一个存储单元的物理地址由段基址和偏移地址两
  • 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx

    踩坑经历 因为项目需要去对接别的接口 使用URLConnection POST请求https接口 发送json数组时遇到java io IOException Server returned HTTP response code 500 f
  • 【数据结构】——单链表超详细介绍(独家介绍,小白必看!!!)

    被滑走别滑走 我这一万字的文章 写的真的很痛苦的 希望能得到一点点支持 重点内容和易错点都用彩笔标注了 干货满满 耐心看完 我真的真的有在认真更新o o 上一篇文章介绍完顺序表后 我们就要开始学习链表了 链表的种类有很多 比如说单链表 双向
  • VS2022安装教程和使用说明来了

    我看很多小伙伴已经开始迫不及待的安装VS2022了 虽然我也安装了VS2022 但是我依旧使用VS2019 因为我觉得适合我的才是最好的 并非是最新的 所以大家在使用的时候 根据实际需求选择开发工具 不要一味追求最新 要考虑是否符合你当下的
  • 解决Android8.0中透明Activity锁定方向崩溃问题

    该问题为 Android 8 0 系统 bug 在 8 0 手机上 当应用 targetSdkVersion gt 26 时 透明背景的 Activity 如果锁定了屏幕方向 打开该 Activity 就会触发必现的崩溃 触发具体条件为 A