views:

170

answers:

2

Hi, I specified a meta-data in my manifest.xml like this:

<meta-data android:value="5555555555" android:name="foo"></meta-data>

When accessing the meta data like this:

ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);

this value gets interpreted as int and - more importantly - incorrectly interepreted (1260588259).

Since the type is determined automatically by the build system ( booleans, ints, floats and strings ) i wondered if there is any way to force the datatype to string.

I tried adding a space at the end ( "5555555555 "), but then the value gets interpreted as 5.5555553E9 float! ).

I also tried using getString instead of get, but then null is returned.

Any ideas? TIA.

A: 

Instead of a space, try using a piece of punctuation that should have no role in a numeric value, like a colon, and see if that helps.

CommonsWare
problem is that i really need to have the number unaltered. if possible. i could always use something like "num:5555555555" but i would only do it that way if there really is no other way.
fabricci
+1  A: 

Putting an escaped space in front of the number seems to work:

<meta-data android:name="foo" android:value="\ 1234567890"/>

The escaped space doesn't appear in the value returned by get().

I have no idea quite how this works, if I'm honest.

If you want something documented and therefore more reliable you can always put your string value as a resource and refer to it:

<meta-data android:name="foo" android:resource="@string/mynumber"/>
Dave Webb