在Tasker中通过JavaScript获取Android设备Locale失败求助
在Tasker中用JavaScript获取Android Locale的正确姿势
我帮你搞定这个问题!你遇到的变量为空和报错问题,主要是因为Tasker的JavaScript运行环境(Rhino)对Android API的调用规则有特殊要求,还有变量暴露的方式不对。下面给你一步步解决:
核心问题分析
- 类名不完整导致变量为空:你直接写
Locale.getDefault()或者Resources.getSystem(),Rhino引擎找不到对应的Android类——必须写完整的包路径,比如java.util.Locale、android.content.res.Resources。 - 用String声明变量报错:JavaScript是弱类型语言,不能像Java那样用
String作为变量类型,只能用var/let/const声明,所以这才会触发语法错误。 - 变量未同步到Tasker:就算JS里的变量有值,你也得用Tasker提供的
setGlobal()方法把值存到Tasker的全局变量里,不然Tasker外面拿不到这个值。
正确的脚本示例
方法1:直接获取默认Locale
// 完整类名调用Android API var deviceLocale = java.util.Locale.getDefault().toString(); // 把值存入Tasker全局变量%LOCALE setGlobal("LOCALE", deviceLocale);
方法2:通过Configuration获取Locale(适配Android 7.0+)
var resources = android.content.res.Resources.getSystem(); var config = resources.getConfiguration(); // 获取第一个Locale(多语言环境下的首选语言) var deviceLocale = config.getLocales().get(0).toString(); setGlobal("LOCALE", deviceLocale);
如何使用
- 在Tasker里新建一个任务,添加「JavaScript」动作;
- 把上面的脚本粘贴到代码框里;
- 运行任务后,你就能在Tasker的变量列表里找到
%LOCALE,它的值就是设备的Locale(比如zh_CN、en_US)。
进阶:拆分Locale的语言和国家代码
如果需要单独获取语言或国家代码,可以这样写:
var loc = java.util.Locale.getDefault(); var langCode = loc.getLanguage(); // 比如"zh" var countryCode = loc.getCountry(); // 比如"CN" setGlobal("LOCALE_LANG", langCode); setGlobal("LOCALE_COUNTRY", countryCode);
内容的提问来源于stack exchange,提问作者Summer Son
相关产品推荐
相关产品推荐

