2010-08-09 52 views
78

我有一個服務類。我已經將這個類導出到jar,並且我已經將jar嵌入到了我的客戶端應用程序中。無法啓動服務意圖

需要時,我打電話給服務類。當我嘗試這樣做,我得到以下錯誤:

Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found 

我除了有其他類從服務類,我能夠訪問(創建該類的對象),這是相同的罐子裏。

我覺得我錯過了我的配置或清單等東西。

請幫我鑑定一下。我的代碼如下:

public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState); 
     Intent intent = new Intent() ; 
     intent.setClassName("com.sample.service" ,"com.sample.service.serviceClass") ; 
     this.startService(intent) ; // when I call this line I get the message... 
     // binding other process continue here 
} 

客戶的manifest.xml

<service android:name="com.sample.service.serviceClass" 
      android:exported="true" android:label="@string/app_name" 
      android:process=":remote"> 
    <intent-filter><action android:name="com.sample.service.serviceClass"></action> 
    </intent-filter> 
</service> 

在此先感謝,
維奈

+0

我試圖修復你的代碼,但是在源代碼中有一些問題,我覺得我不夠理解它。基本上你在中有一個額外的空間,它應該是,但是如果你看看源代碼,你在兩個import語句前有一個'/',我不確定它們是否應該在那裏。我認爲'<'之後的空格將成爲你問題的原因。 – 2010-08-09 11:15:01

+0

感謝詹姆斯的回覆。這些空間是故意僅在網站上顯示的。在代碼內部,標籤內部沒有空格。即使是「\」只能在網站上正確顯示。 基本上,我在eclipse中沒有得到任何編譯錯誤。只有在運行時,我在LogCat – Vinay 2010-08-09 11:55:39

回答

48

首先,你不需要android:process=":remote",因此請刪除它,因爲它的所有將做的是佔用額外的RAM沒有任何好處。

其次,由於<service>元素包含一個操作字符串,使用它:

public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState); 
     Intent intent=new Intent("com.sample.service.serviceClass"); 
     this.startService(intent); 
} 
+0

中收到消息尊敬的Mark先生,我添加了遠程程序,因爲我需要從不同的應用程序訪問相同的內容。在網絡上閱讀後,我將它包括在內,以便實施遠程服務。 我按照您的建議進行了修改,現在工作正常。 再次感謝。 – Vinay 2010-08-09 13:10:11

+2

@Vinay:「我需要從不同的應用程序訪問相同的內容。」你仍然不需要'android:process =「:remote」',所以請刪除它,因爲它會做的就是佔用額外的RAM沒有好處。遠程服務是通過AIDL提供API並且與android:process'屬性無關的服務。以下是示例遠程服務:http:// github。com/commonsguy/cw-advandroid/tree/master/AdvServices/RemoteService /下面是該服務的相應客戶端:http://github.com/commonsguy/cw-advandroid/tree/master/AdvServices/RemoteClient/ – CommonsWare 2010-08-09 13:14:32

+0

謝謝爲馬克先生輸入。我一定會這樣做的...... – Vinay 2010-08-09 14:05:47

70

對於任何人碰到這個線程來我有這個問題,是拉我的頭髮。 我在'<應用程序>'結束標記DUH以外的服務聲明!

RIGHT:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    ...> 
... 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity ...> 
     ... 
    </activity>  

    <service android:name=".Service"/> 

    <receiver android:name=".Receiver"> 
     <intent-filter> 
      ... 
     </intent-filter> 
    </receiver>   
</application> 

<uses-permission android:name="..." /> 

錯了,但還是順利完成編譯:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    ...> 
... 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity ...> 
     ... 
    </activity> 

</application> 

    <service android:name=".Service"/> 

    <receiver android:name=".Receiver"> 
     <intent-filter> 
      ... 
     </intent-filter> 
    </receiver>   

<uses-permission android:name="..." /> 

+7

這聽起來像是一個增強型android lint工作,可以解決這些簡單的錯誤!我們最終可能會得到。 – 2012-06-07 15:13:42

+1

我拼錯了xml中的服務名稱!這讓我知道問題出在哪裏。 thanx – Arvand 2013-07-13 13:33:46

+0

感謝您發佈您的答案。這終於解決了服務未開始。 – pmont 2013-07-31 22:07:45

31

1)檢查如果艙單服務聲明嵌套在應用程序標籤

<application> 
    <service android:name="" /> 
</application> 

2)檢查您的service.java是在同一個包或差異包作爲活動

<application> 
    <!-- service.java exists in diff package --> 
    <service android:name="com.package.helper.service" /> 
</application> 
<application> 
    <!-- service.java exists in same package --> 
    <service android:name=".service" /> 
</application> 
+1

與點或不?在我的情況:不是,而是我使用<服務的android:名稱=「服務」/>和它works.see http://stackoverflow.com/questions/2265020/why-doesnt-my-service-work-in-android -i-just-want-to-log-something-ever-5-seco – DiveInto 2011-09-21 08:36:11

+0

帶點,它應該工作,因爲在頂部你定義你的包路徑 – Jianhong 2011-11-02 07:30:08

+3

老兄,非常感謝你的答案。我一直在與一個friggin問題摔跤,事實證明我的服務是在一個不同的包。如果我能擁抱你,我會! – racl101 2012-03-07 21:58:22

4

我希望我能幫助具有此信息的人: 我將我的服務類移到了另一個包中,並且修復了引用。該項目非常好,但該活動無法找到服務級別。

通過觀察logcat中的日誌,我注意到了有關該問題的警告:活動找不到服務類,但有趣的是該包不正確,它包含「/」字符。編譯器正在尋找

com.something./service.MyService

,而不是

com.something.service.MyService

我從包中移動的服務類註銷,然後重新和一切工作就好了。

+0

首先,我認爲/是一個錯誤,但如果你繼續看看logcat條目,你會看到它多次並且所有這些應用程序都能正常工作 – Axxiss 2012-07-13 11:50:40

+1

嗯,我不能否認你的經驗,但是我有點不同,並且通過從包中移出來再次從類中移除,eclipse修復了它自己的錯誤;)並且沒有運行時異常。 – sataniccrow 2012-07-17 14:41:18

+2

我不得不說,它也適用於我。奇怪的問題,我花了半個小時才找到我們的評論。謝謝! – 2012-08-14 15:58:38

0

我發現了同樣的問題。我幾乎失去了一天試圖從OnClickListener方法開始服務 - 在onCreate之外和1天后,我仍然失敗!非常令人沮喪! 我在看示例RemoteServiceController。他們的工作,但我的實施不起作用!

對我來說唯一的方法是從onCreate方法。沒有其他變種的工作,相信我,我已經嘗試過所有。

結論:

  • 如果你把你的服務類在不同的包比在MainActivity,我會得到所有樣的錯誤
  • 同樣,一個「/」無法找到路徑服務,試圖開始Intent(package,className)並沒有什麼,還有其他類型的意向開始

  • 我在同一個包,工程

  • 01活動 最終形式的移動服務類
  • 希望這可以幫助別人通過定義listerners onClickonCreate方法像這裏面:

    public void onCreate() { 
    //some code...... 
        Button btnStartSrv = (Button)findViewById(R.id.btnStartService); 
        Button btnStopSrv = (Button)findViewById(R.id.btnStopService); 
    
        btnStartSrv.setOnClickListener(new OnClickListener() { 
         public void onClick(View v) { 
          startService(new Intent("RM_SRV_AIDL")); 
         } 
        }); 
    
        btnStopSrv.setOnClickListener(new OnClickListener() { 
         public void onClick(View v) { 
          stopService(new Intent("RM_SRV_AIDL")); 
         } 
        }); 
    
    } // end onCreate 
    

另外對於清單文件非常重要,應確保服務應用程序的孩子:

<application ... > 
    <activity ... > 
    ... 
    </activity> 
    <service 
     android:name="com.mainActivity.MyRemoteGPSService" 
     android:label="GPSService" 
     android:process=":remote"> 

     <intent-filter> 
      <action android:name="RM_SRV_AIDL" /> 
     </intent-filter> 
    </service> 
</application> 
0

在我的情況下,意向數據傳輸的最大上限爲1 MB。 我只使用緩存或存儲。

相關問題