无法启动服务意图

时间:2010-08-09 11:02:46

标签: android service android-intent intentfilter

我有一个服务类。我已将此类导出到jar,并且已将jar嵌入到我的客户端应用程序中。

需要时,我会调用服务类。当我尝试这样做时,我收到以下错误:

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

除了服务类之外,我还有其他类,我可以访问它(创建该类的对象),它们位于同一个jar中。

我觉得我在配置或清单中错过了一些东西。

请帮我识别一下。我的代码如下:

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>

提前致谢,
维奈

6 个答案:

答案 0 :(得分:72)

对于遇到这个帖子的其他人,我遇到了这个问题并且正在拉我的头发。 我有'&lt; OUTSIDE的服务声明应用程序&gt;”结束标记DUH!

从右:

<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="..." />

答案 1 :(得分: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);
}

答案 2 :(得分:32)

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>

答案 3 :(得分:5)

我希望我也能用这些信息帮助别人: 我将我的服务类移动到另一个包中,并修复了引用。该项目非常好,但活动无法找到服务类。

通过观察logcat中的日志,我注意到有关该问题的警告:活动无法找到服务类,但有趣的是该包不正确,它包含一个“/”字符。编译器正在寻找

  

com.something./service.MyService

而不是

  

com.something.service.MyService

我将服务类从包中移出并重新进入,一切正常。

答案 4 :(得分:0)

我发现了同样的问题。我失去了差不多一天尝试从OnClickListener方法开始提供服务 - 在onCreate之外,在1天之后,我仍然失败了!很沮丧! 我正在查看示例示例RemoteServiceController。他们的工作,但我的实施不起作用!

对我有用的唯一方法是来自onCreate方法。没有其他变种有效,相信我,我已经尝试过所有这些。

结论:

  • 如果您将服务类放在与mainActivity不同的包中,我将会遇到各种错误
  • 另外一个“/”找不到服务的路径,尝试从Intent(package,className)开始尝试,没有其他类型的Intent开始

  • 我将服务类移动到活动的同一个包中 有效的最终表格

  • 希望这可以通过在onClick方法中定义listerners onCreate来帮助某人:

    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
    

对于Manifest文件也非常重要,请确保该服务是应用程序的子项:

<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>

答案 5 :(得分:0)

在我的情况下,Intent的数据传输最大上限为1 MB。 我只是使用缓存或存储。