2010-01-08 5 views
13

백그라운드 서비스가 실행 중이며 서비스와 상호 작용하는 클라이언트가 있습니다.서비스 콜백이 android에서의 활동으로 돌아갑니다.

클라이언트가 일부 작업을 요청하면 서비스에서이를 수행하고 결과를 활동 (클라이언트)으로 다시 보내야합니다.

나는 활동에서 서비스 메소드를 호출하고 콜 백을 사용하여 내가 원하는 것을 얻을 수있는 방법을 안다. 그러나 Api 데모 (원격 서비스)에서 제공되는 콜백 메커니즘 및 코드 예제를 이해할 수 없습니다.

누군가이 서비스 콜백이 어떻게 작동하는지 설명 할 수 있습니까? 또는 간단한 메커니즘을 사용하여 달성 할 수있는 모든 것.

답변

5

다음은 흐름입니다.
서비스를 호출 할 의도를 만드십시오. 당신은 서비스가 결합되면, 그것은 IBinder 인터페이스입니다 그것은 고객과 대화 할 수있는 터널을 생성합니다 BIND_AUTO_CREATE

startService() 또는 BindService() 중 하나를 할 수 있습니다. 이것은 당신의 AIDL 인터페이스 구현에 의해 사용 및 반환 된 IBinder이 클라이언트에서 만든 mBinder, ServiceConnection 다시 호출하고이

를 사용하여 서비스 인터페이스를 얻을 것이다 반환되면

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() { 
    public int getNumber() { 
     return new Random().nextInt(100); 
    } 
}; 

public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show(); 
    return mBinder; 
} 

에서

  mConnection = new ServiceConnection() { 

     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 

     } 

     public void onServiceConnected(ComponentName name, IBinder service) { 
      // TODO Auto-generated method stub 

      mService = MyServiceInterface.Stub.asInterface(service); 


    }; 
이제 모든 서비스 전화 retreive하는 mService 인터페이스를 가지고 그

+3

방법 활동에 다시 서비스에서 전화를 얻는 방법? –

관련 문제