24

次のように、manifest.xmlでメタデータを指定しました。

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

このようにメタデータにアクセスする場合:

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

この値はintとして解釈され、さらに重要なことに、誤って解釈されます(1260588259)。

タイプはビルドシステム(ブール値、int、float、文字列)によって自動的に決定されるため、データ型を文字列に強制する方法があるかどうか疑問に思いました。

最後にスペース( "5555555555")を追加しようとしましたが、値は5.5555553E9floatとして解釈されます。)。

getの代わりにgetStringを使用しようとしましたが、nullが返されます。

何か案は?TIA。

4

4 に答える 4

38

番号の前にエスケープされたスペースを置くことはうまくいくようです:

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

エスケープされたスペースは、によって返される値には表示されませんget()

正直なところ、これがどのように機能するのかよくわかりません。

何かを文書化して信頼性を高めたい場合は、いつでも文字列値をリソースとして配置して参照できます。

<meta-data android:name="foo" android:resource="@string/mynumber"/>
于 2010-01-28T14:56:53.937 に答える
9

私もそのような問題を抱えています。私の解決策は次のとおりです。

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

変数の最後に追加しました-eskapeシーケンス"\0"(NULL-は文字列の終わりを定義するためによく使用されます(たとえば、言語Cで)。

これは私のために働きます。

よろしくお願いします。

于 2016-06-09T07:53:16.040 に答える
0

スペースの代わりに、コロンのように数値に影響を与えない句読点を使用してみて、それが役立つかどうかを確認してください。

于 2010-01-28T14:35:27.937 に答える
0

私は最近この問題に遭遇しましたが、FacebookアプリケーションIDのようなものが整数として解釈され、オーバーフローによる問題が発生することは非常に苛立たしいことです(もちろん)。暗黙のタイピングをオーバーライドできると思っていました。たとえば、次の代わりに:

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

私たちが書くことができればそれは素晴らしいでしょう:

<meta-data android:name="value" android:type="string" android:value="12345678901234567890" />

これを補うために、マニフェスト属性が次のようになることを要求するサポートコードをいくつか作成しました。

<meta-data android:name="value1" android:value="string/12345678901234567890" />
<meta-data android:name="value2" android:value="integer/12345" />
<meta-data android:name="value3" android:value="boolean/true" />
<meta-data android:name="value4" android:value="float/1.34" />
<meta-data android:name="value5" android:value="float/6" />

@stringこれは、を削除したことを除いて、Android /@integer構文に似ていることを意図していることに注意してください。これは@、間接レベルを削除するものとして解釈されます。

[0-9] +の元の問題を解決するだけでなく、常に整数として解釈されるように見えるだけでなく、整数のように見えても浮動小数点数を直接指定することもできます。

これのさらなる利点は、タイプのセットを任意に拡張できることです。例えば

<meta-data android:name="myfrac" android:value="fraction/3/7" />
于 2015-04-21T18:10:00.837 に答える