Android 开发板接入外接USB键盘App重启问题

这篇具有很好参考价值的文章主要介绍了Android 开发板接入外接USB键盘App重启问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于插入部分无线鼠标Android应用重启问题

前言

在Android 9.0的项目中,测试工程师验证问题时插入某些USB的无线鼠标,会导致当前的APK会销毁然后重启一次,重新走一次生命周期。

Activity为啥会重启?

为什么会重启?

我们大概率的知道,一般App重启大致有如下原因:

  1. APP异常了(微信存在这样的问题,闪退重启)

机器状态改变了(比如改变语言),导致Activity重启了

不过,由于日志中没有异常日志,因此考虑后面一种情况。

下面是在《插入无线鼠标Android应用重启问题》

后面发现插入有问题的USB无线收发器,会生成2个设备,一个鼠标和一个键盘。没错,这是键鼠套装一体的无线收发器,正是这个键盘导致出现了现在的这个现象,而有些无线鼠标的无线收发器不是键鼠套装,所有只会有1个鼠标设备,所以插上去没有问题。

这里更加肯定了我的猜想[机器状态改变了(比如改变语音),导致Activity重启了]。

特意打印了一下Activity的生命周期的日志,发现Activity被销毁,然后重新启动了。

Android文档中有如下说明(前面《AndroidManifest.xml的configChanges配置简介》中也讲解过)

如果我们AndroidManifest.xml中的Activity中的android:configChanges申明了对应的属性,当属性改变时Activity不会重启且调用onConfigurationChanged()

因此解决,这个问题就是我们在AndroidManifest.xml中申明一下插入USB的无线鼠标后会改变的状态值即可。

但,我们不知道到底改变了哪一个值。为了验证,我们可以通过下面的方式做一下试验,然后找出幕后的凶手。

查找凶手

磨刀呼呼向猪羊。

第一步:AndroidManifest.xml的MainActivity的configChanges申明加入可能改变的状态

android:configChanges="orientation|uiMode|keyboard|keyboardHidden|fontScale|touchscreen|navigation|screenLayout|colorMode"

第二步:MainActivity中实现onConfigurationChanged,并添加如下打印。

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged              keyboard : " + newConfig.keyboard);
        Log.d(TAG, "onConfigurationChanged            densityDpi : " + newConfig.densityDpi);
        Log.d(TAG, "onConfigurationChanged             fontScale : " + newConfig.fontScale);
        Log.d(TAG, "onConfigurationChanged    hardKeyboardHidden : " + newConfig.hardKeyboardHidden);
        Log.d(TAG, "onConfigurationChanged        keyboardHidden : " + newConfig.keyboardHidden);
        Log.d(TAG, "onConfigurationChanged                   mcc : " + newConfig.mcc);
        Log.d(TAG, "onConfigurationChanged                   mnc : " + newConfig.mnc);
        Log.d(TAG, "onConfigurationChanged            navigation : " + newConfig.navigation);
        Log.d(TAG, "onConfigurationChanged      navigationHidden : " + newConfig.navigationHidden);
        Log.d(TAG, "onConfigurationChanged           orientation : " + newConfig.orientation);
        Log.d(TAG, "onConfigurationChanged        screenHeightDp : " + newConfig.screenHeightDp);
        Log.d(TAG, "onConfigurationChanged          screenLayout : " + newConfig.screenLayout);
        Log.d(TAG, "onConfigurationChanged smallestScreenWidthDp : " + newConfig.smallestScreenWidthDp);
        Log.d(TAG, "onConfigurationChanged           touchscreen : " + newConfig.touchscreen);
        Log.d(TAG, "onConfigurationChanged                uiMode : " + newConfig.uiMode);
        Log.d(TAG, "onConfigurationChanged                locale : " + newConfig.locale)

第三步:插拔USB无线收发器

下面是插拔的日志打印。

# 插入
 onConfigurationChanged              keyboard : 2
 onConfigurationChanged            densityDpi : 160
 onConfigurationChanged             fontScale : 1.0
 onConfigurationChanged    hardKeyboardHidden : 1
 onConfigurationChanged        keyboardHidden : 1
 onConfigurationChanged                   mcc : 460
 onConfigurationChanged                   mnc : 7
 onConfigurationChanged            navigation : 2
 onConfigurationChanged      navigationHidden : 1
 onConfigurationChanged           orientation : 2
 onConfigurationChanged        screenHeightDp : 670
 onConfigurationChanged          screenLayout : 268435812
 onConfigurationChanged smallestScreenWidthDp : 720
 onConfigurationChanged           touchscreen : 3
 onConfigurationChanged                uiMode : 17
 onConfigurationChanged                locale : zh_CN
 
# 拔出
 onConfigurationChanged              keyboard : 1
 onConfigurationChanged            densityDpi : 160
 onConfigurationChanged             fontScale : 1.0
 onConfigurationChanged    hardKeyboardHidden : 2
 onConfigurationChanged        keyboardHidden : 1
 onConfigurationChanged                   mcc : 460
 onConfigurationChanged                   mnc : 7
 onConfigurationChanged            navigation : 1
 onConfigurationChanged      navigationHidden : 2
 onConfigurationChanged           orientation : 2
 onConfigurationChanged        screenHeightDp : 670
 onConfigurationChanged          screenLayout : 268435812
 onConfigurationChanged smallestScreenWidthDp : 720
 onConfigurationChanged           touchscreen : 3
 onConfigurationChanged                uiMode : 17
 onConfigurationChanged                locale : zh_CN

日志中出现navigation、navigationHidden、keyboard、hardKeyboardHidden几个的状态改变了。

解决方式

从上面日志中知道navigation、navigationHidden、keyboard、hardKeyboardHidden几个的状态发生了改变,加上我们没有配置这几个状态的监听,所以Activity被重启了一次。

因此,我们在AndroidManifest.xml中的Activity配置为如下:文章来源地址https://www.toymoban.com/news/detail-507473.html

android:configChanges="keyboard|navigation|keyboardHidden"

参考文章

  1. 《插入无线鼠标Android应用重启问题》
  2. 《onConfigurationChanged》
  3. 《AndroidManifest.xml的configChanges配置简介》

到了这里,关于Android 开发板接入外接USB键盘App重启问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在13.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(45)
  • Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(85)
  • 笔记本外接显卡坞死机/键盘鼠标卡死问题的解决

    我的笔记本尝试ai绘画当然是不行的,所以用雷电3显卡坞外接显卡使用。但是使用雷电3显卡坞后,经常性的死机。玩游戏的时候不会,表明外接显卡在工作时就不会导致死机。 你可以先借鉴下面的简单方法1:解决外接显卡扩展坞鼠标键盘卡死的问题 - 知乎 或方法2:用一个

    2024年02月08日
    浏览(80)
  • Android 沾包处理,以串口接入为例 (usb-serial-for-android)

    我们在通过串口、 TCP 、 UDP 等方式接收协议的时候,由于单次接收数据有限,导致一条命令可能被分割成多次进行接收。 这种情况下,就需要进行沾包处理,使多次接收的数据,合并成一条数据。本文通过博主本人一个真实的工作案例,实例讲解Android串口的接入和对于沾包

    2023年04月16日
    浏览(28)
  • VM下虚拟机连接usb相机后电脑蓝屏重启问题

    VM下虚拟机连接usb相机后重启问题 在VM虚拟机下连接摄像头设备到虚拟机后 打开虚拟机,并且切换usb1.1时候,虚拟机正常启动,但是调用摄像头,摄像头亮光,但是没有头像 (要切换usb2或者usb3解决) 切换usb2/3重启虚拟机,电脑自动蓝屏 之前所用的VM12版本太低,导致软件的

    2024年02月15日
    浏览(31)
  • Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)

    《Linux驱动开发(一)—环境搭建与hello world》 《Linux驱动开发(二)—驱动与设备的分离设计》 《Linux驱动开发(三)—设备树》 《Linux驱动开发(四)—树莓派内核编译》 《Linux驱动开发(五)—树莓派设备树配合驱动开发》 《Linux驱动开发(六)—树莓派配合硬件进行字

    2024年02月08日
    浏览(36)
  • bios无法识别usb键盘问题解决备忘

    戴尔的T3600工作站bios中无法使用usb键盘,参考: USB 3.0 和 USB 2.0 在 Precision T3600、T5600 或 T7600 系统上出现故障 | Dell 中国 https://www.dell.com/support/kbdoc/zh-cn/000141904/usb-3-0-%E5%92%8C-usb-2-0-%E5%9C%A8-precision-t3600-t5600-%E6%88%96-t7600-%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%87%BA%E7%8E%B0%E6%95%85%E9%9A%9C  所以就是

    2024年02月11日
    浏览(41)
  • android 实现APP重启,华为亲测

    准备工具类 准备Service 3 需要权限(华为手机测试需要这两个权限,少了启动不了) uses-permission android:name=\\\"android.permission.SYSTEM_ALERT_WINDOW\\\" / uses-permission android:name=\\\"android.permission.SYSTEM_OVERLAY_WINDOW\\\" / 4 AndroidManifest.xml 注册Service service android:process=\\\":restart\\\" android:name=\\\".util.killSelfServ

    2024年02月16日
    浏览(21)
  • Android adb命令 关闭app 和 启动app 还有重启app命令

    以下是Android中使用adb命令关闭应用程序、启动应用程序和重启应用程序的方法: 1.关闭应用程序 使用以下命令可以关闭正在运行的应用程序: 其中,package_name是您要关闭的应用程序的包名。例如,要关闭Google Chrome应用程序,您可以使用以下命令: 2.启动应用程序 使用以下

    2024年02月11日
    浏览(36)
  • Android APP之接入AWS IOT实现发布订阅测试

    本文中是开发的APP控制端(开发语言是Android),来接入AWS IOT平台并且实现消息的订阅和发布。由于能力有限,若有错误的理解请指正。 AWS IOT的官方文档,不得不说文档写的真“详细”啊,看得云里雾里,只能参考互联网。 由于国内使用AWS物联网平台应用不多,关于Android APP的

    2024年01月23日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包