我有一个服务类。我已将此类导出到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>
提前致谢,
维奈
答案 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
方法。没有其他变种有效,相信我,我已经尝试过所有这些。
结论:
另外一个“/”找不到服务的路径,尝试从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。 我只是使用缓存或存储。