서비스 클래스가 있습니다. 이 클래스를 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>
미리 감사드립니다,
Vinay
답변
첫째,은 필요하지 않으므로 android:process=":remote"
제거하십시오. 왜냐하면 아무 이익도없이 추가 RAM을 차지하기 때문입니다.
둘째, <service>
요소에 작업 문자열이 포함되어 있으므로 다음을 사용하십시오.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent=new Intent("com.sample.service.serviceClass");
this.startService(intent);
}
답변
이 스레드를 접하는 다른 사람에게는이 문제가 있었고 머리카락을 뽑았습니다.
‘<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="..." />
답변
1) 매니페스트의 서비스 선언이 애플리케이션 태그에 중첩되어 있는지 확인
<application>
<service android:name="" />
</application>
2) service.java
활동과 동일한 패키지 또는 diff 패키지에 있는지 확인하십시오.
<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>
답변
이 정보로 누군가를 도울 수 있기를 바랍니다. 서비스 클래스를 다른 패키지로 이동하고 참조를 수정했습니다. 프로젝트는 완벽했지만 서비스 클래스는 활동에서 찾을 수 없습니다.
logcat에서 로그인을보고 문제에 대한 경고를 발견했습니다. 활동이 서비스 클래스를 찾을 수 없었지만 재미있는 점은 패키지가 잘못되었고 “/”문자가 포함되어 있다는 것입니다. 컴파일러가 찾고 있던
com.something./service.MyService
대신에
com.something.service.MyService
나는 패키지에서 서비스 클래스를 옮겼다가 다시 들어 왔고 모든 것이 잘 작동했습니다.
답변
제 경우에는 Intent에 의한 데이터 전송을위한 최대 1MB입니다. 캐시 나 스토리지 만 사용하겠습니다.
답변
나는 같은 문제를 발견했습니다. OnClickListener
메소드 에서 서비스를 시작하려고 거의 하루를 잃었습니다. onCreate
1 일이 지난 후에도 여전히 실패했습니다 !!!! 매우 실망 스럽습니다! 샘플 예제를보고있었습니다 RemoteServiceController
. 작동하지만 내 구현이 작동하지 않습니다!
나를 위해 일하는 유일한 방법은 내부 onCreate
방법이었습니다. 다른 변형은 작동하지 않았으며 모두 시도해 보았다고 믿습니다.
결론:
- 서비스 클래스를 mainActivity와 다른 패키지에 넣으면 모든 종류의 오류가 발생합니다.
-
또한 하나의 “/”는 서비스에 대한 경로를 찾을 수 없으며로 시작
Intent(package,className)
하고 아무것도 시도 하지 않았으며 다른 유형의 의도 시작도 시도했습니다. -
작동하는 활동 최종 양식의 동일한 패키지에서 서비스 클래스를 이동했습니다.
-
바라건대 이것은 다음 과 같이 메소드
onClick
내부에 리스터 너를 정의함으로써 누군가를 도울 것입니다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>