2012-04-17 6 views
16

"@ string/action_name"を使用してインテントフィルタアクションを定義すると、私のBroadcastReceiverは呼び出されません。 strings.xmlから対応する文字列をAndroidManifest.xmlにコピー/ペーストすると、完全に機能します。AndroidManifest.xmlで<intent-filter>を定義するのに@string表記を使用できません

のAndroidManifest.xmlから非作業例:

<receiver 
    android:name=".ServerUpdateReceiver" > 
    <intent-filter> 
     <action android:name="@string/ACTION_INFORM_USER_SERVER_UPDATE" /> 
    </intent-filter> 
</receiver> 

のAndroidManifest.xmlから例の作業:

<receiver 
     android:name=".ServerUpdateReceiver" > 
     <intent-filter> 
      <action android:name="com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE" /> 
     </intent-filter> 
    </receiver> 

をちょうど完全を期すため、のstrings.xmlは、次の行が含まれています

<string name="ACTION_INFORM_USER_SERVER_UPDATE">com.franklinharper.intent.action.ACTION_INFORM_USER_SERVER_UPDATE</string> 
+1

このような種類のものは私を泣かせます。私はなぜ私の 'BroadcastReceiver'がトリガーしなかったのかを理解しようと、ほぼ1時間を無駄にしました。文字列リソースを使用することは理にかなっています。なぜなら、すべてが1か所にあり、重複する定数を避けるからです。今、誰かが来て、マニフェストのアクションストリングを変更するが、他の場所では変更しないと想像してみてください...哀れみ。 –

+0

それは不思議です、質問のおかげで –

答えて

26

specでは、リソース識別子でアクションを構成する方法がありません。これは単純な文字列でなければなりません。おそらくAndroid IntentディスパッチシステムがAPKを開いてフィルタの目的を理解する必要がないようにする必要があります。

+4

私はあなたとドキュメントを理解していれば、正しく "@文字列/名前"の構文は解釈されていません。これは、ADTプラグインが完全に自動完成を喜んで行うので、むしろ混乱します。私がしようとしていたのは、コードとマニフェストによって参照された1つのユニークなアクション名でした。しかし、これは可能ではないようです。 –

+0

私はすべてをかなり一定にしたいと思ったので悲しいですが、大丈夫です。 –