[android] 서비스 의도를 시작할 수 없습니다.

서비스 클래스가 있습니다. 이 클래스를 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메소드 에서 서비스를 시작하려고 거의 하루를 잃었습니다. onCreate1 일이 지난 후에도 여전히 실패했습니다 !!!! 매우 실망 스럽습니다! 샘플 예제를보고있었습니다 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>


답변