2012-04-20 4 views
1

私は1つの問題を抱えています。私はこのようなマニフェストで私のサービスstring.xmlでのアクションと同じを使用して定義している:問題ですstring.xmlにサービスアクションが定義されていないと動作しません

Intent serviceIntent = new Intent(getResources().getString(R.string.my_service_action)); 
startService(serviceIntent); 

は、誰も私に伝えることができます:

<service android:name=".MyService" > 
    <intent-filter > 
     <action android:name="@string/my_service_action" /> 
    </intent-filter> 
</service> 

もサービスを開始しながら、私はこのように始めています。

私は同じ値の行動をハードコードしても、うまく動作します。いくつかのヒットした後、私はそれがマニフェストファイルで使用されているときだけ動作しないことを発見しました(例えば、ハードコードのjavaコードのアクション値はマニフェストではありません)。

答えて

1

サービス用のアクション文字列として文字列リファレンスを使用することはできません。具体的な文字列値でなければなりません。 javadocのあたりのように:

アンドロイド:名前 の命名規則Javaスタイルを使用して、処理されるアクションの名前。 [文字列]例えば

<service android:name=".MyService" > 
    <intent-filter > 
     <action android:name="com.demo.service.MY_SERVICE" /> 
    </intent-filter> 
</service> 

、その後、あなたはとしてそれを使用する必要があります。

Intent serviceIntent = new Intent("com.demo.service.MY_SERVICE"); 
startService(serviceIntent); 
+0

こんにちはWaqas。返信いただきありがとうございますが、あなたの答えは具体的な文字列値でなければなりませんが、私はJava-docで同じことを見ていませんでした。また、マニフェストは、私がやっているようなマニフェストのいくつかの他の属性を使用します。たとえば、android:lable = "@ string/app_name"とします。だから、なぜそれはアクション属性のために働いていないのですか? – AndroDev

+0

ラベルの上にマウスを置くと、 '指定された項目の読みやすい名前です。 [string、reference] 'これは、文字列の** String **または** Reference **のいずれかを設定できることを意味します。実際には、それが必要なものをあなたに伝えます。今私が投稿したものを見ると、** String **と表示されます。これは、あなたが参照を使用できないことを意味します。マニフェストでこれを確認できます:) – waqaslam

+0

検証済み。ありがとう。 – AndroDev

関連する問題