android - 在Android中,有没有办法在运行时而不是在 list 中为 Activity 设置 "android:configChanges"?

标签 android android-manifest backwards-compatibility

我的应用程序设置为在 minSdk = 5 上运行,但绝大多数用户使用 SDK 8 (FroYo) 及更高版本。我希望能够将 android:configChanges="uiMode"用于我的主要 Activity ,但我无法做到这一点,因为直到 SDK 级别 8 才引入该模式。所以,我希望我可以在运行时 - 检查设备上运行的 SDK 级别,然后使用反射添加该参数。

这可能吗?

编辑: 问题是,每当用户的手机连接到扩展坞时,我的应用程序就会被终止,然后重新创建。我试图通过包含 android:configChanges="uiMode"来避免这种情况。

最佳答案

经过深入研究Android Reference ,在运行时您可以对 list 进行的更改很少。这是出于安全考虑,因为通过 PackageManager,人们可以获得有关设备上任何应用程序的非常具体的信息。虽然启用/禁用给定组件很容易,但在大多数其他情况下,您只能读取 list 信息...而不能写入它。

替代方案

  • 您可以制作一个支持 API 级别 8 的单独 APK。

  • 您可以手动检查配置状态并在配置状态更改时运行代码。配置的对象引用是 here .

编辑:(新信息)

虽然你无法更改 configChanges,但我发现 this question与你的密切相关。事实证明您可能不必这样做。这意味着您在支持新的 configChanges 时可以使用 Android 的向后兼容模式。如果上面的链接已损坏,请参阅以下 URL:https://stackoverflow.com/a/7893148/501932

为了让您使用它,建议在保留原始 minimumSdk 的同时设置一个新的 targetSdk。它还要求您拥有更新的 SDK 本身。显然,这对于使用 AdMob API 的用户来说意义重大。

关于android - 在Android中,有没有办法在运行时而不是在 list 中为 Activity 设置 "android:configChanges"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975056/

相关文章:

linux - 最近编译器的哪些更改导致这个半遗留 C++ 项目停止编译?

opengl - 如何确保我的 Windows OpenGL 应用程序的向后兼容性?

java - Gradle项目中的Gradle项目?

即使设置了 configChanges,Android Activity 也会在方向更改时重新启动

android - list 同步错误

android - 使用隐式 Intent 启动 Activity ?

java - Android 权限 : Backward compatibility. 仅授予使用我的应用程序旧版本的应用程序的访问权限(强制执行新版本权限)

java - 使 ListView 项目可点击出现问题

java - ANDROID:简单的向上导航不起作用

java - Android 无法找到已放入 SD 卡的文件目录