android 无法启动服务意图

dxxyhpgq  于 2022-12-25  发布在  Android
关注(0)|答案(6)|浏览(152)

我有一个服务类,我已经将这个类导出到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   
}

客户端清单. 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>
pu82cl6c

pu82cl6c1#

对于任何其他人遇到这个线程,我有这个问题,是拉我的头发了。我有服务声明以外的'< application>'结束标记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="..." />
tp5buhyn

tp5buhyn2#

首先,您不需要android:process=":remote",所以请删除它,因为它所做的一切只是占用额外的RAM,没有任何好处。
其次,由于<service>元素包含一个action字符串,因此使用它:

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

bogh5gae3#

1)检查清单中的服务声明是否嵌套在应用程序标记中

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

2)检查service.java是否与练习位于同一个包或diff包中
x一个一个一个一个x一个一个二个x

o8x7eapl

o8x7eapl4#

我希望我可以帮助别人与此信息以及:我把我的服务类移到了另一个包中,我修复了引用。这个项目非常好,但是活动找不到服务类。
通过查看logcat中的日志,我注意到了关于此问题的警告:活动找不到服务类,但有趣的是包不正确,它包含一个“/”字符。编译器正在查找
com.something./service.MyService
代替
com.something.service.MyService
我把服务类从包中移出来,又移了回来,一切都运行得很好。

31moq8wy

31moq8wy5#

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

u0njafvf

u0njafvf6#

我发现了同样的问题。我花了几乎一天的时间尝试从OnClickListener方法启动一个服务-在onCreate方法之外,一天后,我仍然失败了!!!!非常令人沮丧!我正在看RemoteServiceController的示例。他们的工作,但我的实现不工作!
对我来说唯一有效的方法是从onCreate方法里面,其他的变体都不起作用,相信我,我都试过了。
结论:

  • 如果您将服务类放在mainActivity之外的其他包中,我将得到各种错误
  • 此外,"/"无法找到服务路径,尝试以Intent(package,className)启动,但一无所获,也有其他类型的Intent启动
  • 我将服务类移到了活动的同一个包中最终形式有效
  • 希望这对在onCreate方法中定义列表器onClick有所帮助,如下所示:
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>

相关问题