2012-04-03 4 views
0

2 개의 애플리케이션을 작성했습니다. MyServiceApplicationMyActivityApplication. 부팅시 원격 서비스로 실행되는 MyService을 실행합니다. MyActivityApplicationMyActivityApplication과 통신하려면 MyServiceApplication 클래스에 액세스 할 수 없습니다. 모든 예제는 나는 다음과 같은 방법으로 서비스에 온라인 밴드에게 활동을 참조하십시오Android - 다른 앱에서 서비스에 바인딩

bindService(new Intent(Binding.this, MyService.class), mConnection, Context.BIND_AUTO_CREATE); 

내 응용 프로그램은 MyService와 통신 할 필요가있다. 이 코드는 Google의 MessengerService 예를 기반으로합니다.

앞서 언급 한 문제는 제가 바인딩하려고하는 서비스가이 서비스를 시작하는 것이 유일한 목적 인 다른 응용 프로그램에 의해 시작되었다는 것입니다.

두 응용 프로그램을 독립적으로 유지할 수있는 방법이 있습니까? 아이디어는 동일한 서비스와 통신 할 수있는 두 번째, 세 번째 및 네 번째 응용 프로그램을 갖게된다는 것입니다.

답변

1

바운드 서비스와 통신하는 데 사용하는 인터페이스를 정의하는 서비스와 응용 프로그램간에 공유 라이브러리가 있어야합니다.

+0

그래서 효과적으로 내 응용 프로그램 서비스를위한 클래스가 들어있는 항아리를 포함해야한다는 것입니다 무슨 말을하는지? 또는 두 개의 개별 응용 프로그램을 만들더라도 동일한 코드 기반을 가져야합니까? – Ali

+0

두 개의 응용 프로그램에서 http://developer.android.com/guide/developing/projects/projects-eclipse.html 라이브러리 프로젝트를 사용해야합니다. 라이브러리는 바인딩 된 서비스의 바인더를 포함해야 바인더를 사용하여 1) 서비스 응용 프로그램에서 바인더 인터페이스를 제공 할 수 있습니다. 2) 두 번째 앱을 서비스에 바인딩하는 데 사용됩니다. – Snicolas

+0

다른 접근법은 AIDL을 사용하는 것일 수 있습니다 : http://developer.android.com/guide/developing/tools/aidl.html. "공유 된"라이브러리는 전체 aidl 파일로 축소 될 수 있습니다. – Snicolas

0

특정 작업으로 서비스에 대한 의도 파일러를 정의하고이 작업에 할당 된 의도로이 서비스에 바인딩 할 수 있습니다.

MyServiceApplication :

<service android:name=".MyService"> 
     <intent-filter> 
     <action android:name="com.some.action.NAME" /> 
     </intent-filter> 
</service> 

MyActivityApplication :

bindService(new Intent("com.some.action.NAME"), serviceConnection, Context.BIND_AUTO_CREATE); 
관련 문제