2012-04-20 16 views
1

我正面臨着一個被解決的問題。我已經定義在string.xml我的服務行動,並使用相同的清單中是這樣的:在string.xml中定義時,服務操作不起作用

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

也同時啓動服務我開始是這樣的:

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

誰能告訴我問題出在哪裏。

如果我硬編碼的行動相同的價值,它工作得很好。在嘗試了一些命令之後,我發現它僅在清單文件中使用時才起作用(例如,在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」。所以問題是爲什麼它不適用於action屬性? – AndroDev 2012-04-20 11:54:52

+0

如果將鼠標懸停在標籤上,它會說'給定項目的用戶可識別名稱。 [string,reference]'這意味着它可以讓你設置字符串的** String **或** Reference **。所以實際上它告訴你自己它需要什麼。現在如果你看看我發佈的那個,它只會說** String **,這意味着你不能使用引用。您可以在清單中自行驗證:) – waqaslam 2012-04-20 11:58:06

+0

已驗證。謝謝。 – AndroDev 2012-04-20 12:36:06