【问题标题】:Activity onCreate() called when connecting OTG device连接 OTG 设备时调用的 Activity onCreate()
【发布时间】:2016-04-16 02:39:53
【问题描述】:

我正在开发一个使用 OTG USB 设备的应用程序。

我正在使用的设备是一个 USB 条码扫描仪,它被 android 检测为键盘。

但是我检测到每次插拔OTG设备,都会调用Activity的onCreate()方法重启App。

这给我带来了很多问题,因为我无法检测到为什么调用 onCreate() 方法。

当 otg 设备被插入/拔出时,是否有任何 Intent 或任何可以触发和捕获的东西?

提前致谢。

【问题讨论】:

    标签: android usb-otg android-usb


    【解决方案1】:

    由于配置更改,android 正在重新启动您的活动,请参阅文档here

    为确保您是这种情况,请尝试将android:configChanges="keyboard" 添加到清单文件中您的活动条目中。这将告诉 android 在插入键盘时不要重新启动 Activity。之后,在插入设备时不应再调用 onCreate()

    请注意,您不应将其用作修复程序,它只是一种确保您的情况属实的方法(并且它不是您代码中的特定内容)。您必须处理活动重启,因为它是 android 中的正常行为,不应导致您的应用程序出现问题。 Activity 重新启动的一个常见原因是方向变化,非常不鼓励使用上述方法解决它,当 android 想要重新启动它时,您的 Activity 应该没有任何问题,请参阅this 答案以获取更多信息。

    【讨论】:

    • 谢谢你,迈克,我检查了你建议我的链接。当 configChanges 发生时,我会尝试恢复状态。但我有一个愚蠢的问题。因此,我可以使用 setRetainInstance(true) 将所有变量放在一个无头片段上,显然,我可以在 onfigChange 发生时恢复它。但是,在碎片存在之前,你怎么能恢复变量。
    • 如果您的变量是 Parcelable,则不需要使用片段。如果是这样,您可以覆盖onSaveInstanceState,将变量保存在捆绑包中,然后使用传递给onCreate 的捆绑包恢复它,请参阅this
    • @Herman ,如果您的变量无法通过捆绑软件保存(例如,它们是 Sockets、Threads 或 AsyncTasks),那么目前可以使用片段.在片段之前人们可以使用已弃用的onRetainNonConfigurationInstance()。见this
    • 非常感谢@Mike。非常感谢您的帮助。它现在正在工作。我只需要你把我的变量放在bunle上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多