如何强制元数据值键入字符串?

P.M*_*lch 23 android android-manifest

我在manifest.xml中指定了一个元数据,如下所示:

<meta-data android:value="5555555555" android:name="foo"></meta-data>
Run Code Online (Sandbox Code Playgroud)

访问元数据时,如下所示:

ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);
Run Code Online (Sandbox Code Playgroud)

这个值被解释为int - 更重要的是 - 错误地解释为(1260588259).

由于类型是由构建系统(布尔值,整数,浮点数和字符串)自动确定的,我想知道是否有任何方法可以强制数据类型为字符串.

我尝试在末尾添加一个空格("5555555555"),但随后该值被解释为5.5555553E9 float!).

我也尝试使用getString而不是get,但是返回null.

有任何想法吗?TIA.

Dav*_*ebb 36

将转义空间放在数字前面似乎有效:

<meta-data android:name="foo" android:value="\ 1234567890"/>
Run Code Online (Sandbox Code Playgroud)

转义的空格不会出现在返回的值中get().

如果我诚实的话,我不知道它是如何工作的.

如果您想要记录并因此更可靠,您可以始终将您的字符串值作为资源并引用它:

<meta-data android:name="foo" android:resource="@string/mynumber"/>
Run Code Online (Sandbox Code Playgroud)


小智 9

我也有这样的问题.我的解决方案如下:

<meta-data android:value="5555555555\0" android:name="foo"></meta-data>
Run Code Online (Sandbox Code Playgroud)

我在变量的末尾添加了 - eskape序列"\ 0"(NULL - 通常用于定义字符串的结尾(例如,在语言C中).

这对我有用.

最好的祝福.