Android force Locale

本文介绍了解决Android2.0平台上的应用程序在使用强制语言转换时出现的屏幕闪烁问题。此问题会导致Activity不断执行onCreate()方法,并在Logcat中显示错误提示。文章提供了在AndroidManifest.xml文件中添加特定属性来解决该问题的方法。
在android 2.0的平台上,如果你使用了强制语言转换,你会看到屏幕在不断的闪烁。因为这个Activity在不断的执行onCreate();在Logcat上你也会看到如下错误:"something wrong here, didn't expect * to be resumed android".
解决办法是:
在manifest 中添加android:configChanges=”locale”这个属性。
[xml]<activity android:name=”.Main” android:configChanges=”locale” android:label=”@string/app_name” />[/xml]
低于2.0的sdk没有这个问题。
[url]http://almondmendoza.com/2009/01/28/force-localize-an-application-on-android/[/url]
### Locale-Emulator 报错解决方案 在使用 Locale-Emulator 时,可能会遇到各种错误情况。以下是常见的错误及其对应的解决方案: #### 1. **无法模拟区域设置** 如果发现 Locale-Emulator 未能成功更改设备的语言或地区设置,可能是由于权限不足或其他配置问题引起的。可以通过以下方式解决: - 确保已授予应用所需的权限,例如 `WRITE_SETTINGS` 或者 `SYSTEM_ALERT_WINDOW` 权限[^1]。 - 如果是在 Android 10 及以上版本运行,可能需要额外启用开发者选项中的“允许调试 APK”功能。 #### 2. **ADB 命令执行失败** 当尝试通过 ADB 控制 Locale-Emulator 的行为时,可能出现命令执行失败的情况。例如,在停止 QQ 应用的过程中出现问题: ```bash [D:\android-sdk-windows\platform-tools\adb.exe -P 5037 -s emulator-5554 shell am force-stop com.tencent.mobileqqi] ``` 这通常是因为目标设备未连接、包名拼写错误或者服务不可用所致[^2]。可以按照以下步骤排查: - 验证设备是否正常连接并处于可调试状态:`adb devices`。 - 检查指定的应用包名是否正确。 - 尝试重启 ADB 服务器:`adb kill-server && adb start-server`。 #### 3. **窗口管理异常** 某些情况下,Locale-Emulator 可能会抛出类似于以下的错误: ```plaintext android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application ``` 这种问题是由于窗口令牌无效造成的。具体原因和修复方法如下: - 错误通常是由于上下文不匹配引起,比如使用了 `getApplicationContext()` 而非 Activity 上下文[^3]。 - 修改代码逻辑,将 `getApplication()` 替换为当前 Activity 实例(即 `this`),从而确保正确的上下文传递。 #### 4. **广播接收器注册问题** 如果 Locale-Emulator 使用了动态广播接收器,则可能存在未注销广播接收器的风险。典型表现为日志中提示类似以下内容: ```plaintext call you are unregister onbrocastRevicer? ``` 这是由于忘记调用 `unregisterReceiver()` 方法导致的资源泄漏问题[^3]。建议在生命周期结束前显式注销广播接收器。 #### 5. **更新冲突** 安装过程中出现以下错误信息: ```plaintext INSTALLATION error: INSTALL_FAILED_UPDATE_INCOMPATIBLE ``` 该问题表明旧版应用尚未完全卸载就试图覆盖安装新版本[^3]。推荐的操作流程包括: - 手动删除现有应用实例后再重新部署。 - 清理缓存数据以及关联文件夹路径下的残留记录。 #### 6. **R.java 文件丢失** 开发阶段偶尔会发生 R.java 自动移除的现象,并伴随重建需求的通知: ```plaintext R.java was removed! Recreating R.java! ``` 此类警告一般不会影响最终产物质量,但仍需注意保持构建环境稳定性和依赖同步准确性[^3]。 --- ### 示例代码片段 下面提供一段简单的脚本用于验证 Locale-Emulator 是否能够切换至特定语言环境: ```java import android.content.Context; import android.os.LocaleList; public class LocaleHelper { public static void setAppLocale(Context context, String languageCode) { LocaleList localeList = new LocaleList(new Locale(languageCode)); LocaleList.setDefault(localeList); Configuration config = context.getResources().getConfiguration(); config.setLocales(localeList); context.createConfigurationContext(config); // Apply changes immediately. } } ``` --- ### 总结 针对 Locale-Emulator 中常见的一些报错现象进行了分析说明,并给出了相应的调整措施。实际操作时还需结合具体情况灵活应对。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值