2017-01-31 3 views
1

나는 안드로이드 자동차를 개발하고하지만 난 ServiceOnbind 방법에 내 코드의이 부분에서 몇 가지 문제가 있습니다안드로이드 자동 SERVICE_INTERFACE MediaBrowserServiceCompat

public IBinder onBind(Intent arg0) { 
    Log.i("TAG", "OnBind"); 
    // TODO Auto-generated method stub 
    if (SERVICE_INTERFACE.equals(arg0.getAction())) { 
     Log.i("TAG", "SERVICE_INTERFACE"); 
     registerReceiver(receiver, filter); 
     return super.onBind(arg0); 
    } 
    else{ Log.i("Musica Service", "musicBind"); 
     return musicBind;} 
} 

나는 musicBind을 통해 내 서비스와 결합 된 다른 활동을 IBinder,하지만 다른 한편으로는 안드로이드 자동 인터페이스에서 내 애플 리케이션을 연결하는 모든 것들을 설정했지만 안드로이드 자동차에서 장치를 끊은 후 내 애플 리케이션을 닫은 후 내 MediaBrowserServiceCompat 나는이 SERVICE_INTERFACE 바인딩 된 서비스를 유지하는 것 같아 중지 할 수 없습니다.

동일한 서비스 MediaBrowserServiceCompat에서 어떻게 중지하거나 삭제할 수 있습니까?

답변

2

MediaBrowserServiceCompat은 사용자가 MediaBrowserServiceCompat에 바인딩 (따라서 마지막 클라이언트가 바인딩 해제 될 때 파괴 됨)되거나 (예 : 백그라운드에서 음악을 재생할 때와 같이) 시작되거나 바인딩되고 시작된 경우 (예 : UI가 보이는 동안 음악을 재생할 때).

귀하의 서비스는 1) 더 이상 바운드 클라이언트가없고 2) stopSelf()으로 전화를 걸었을 때만 소멸됩니다 (어떤 시점에서 시작되었다고 가정). 수백 개의 다른 앱을 사용 해본 Android Auto가 계속해서 서비스에 구속력을 발휘할 것이며 모든 미디어 앱에 적용되는 심각한 문제가되지는 않을 것입니다.

따라서 서비스가 어떻게 든 시작되었을 가능성이 훨씬 큽니다. Media Session callbacks documentation 일 경우 재생을 시작할 때 startService에 전화해야하며 재생을 중지 할 때 stopSelf에 전화해야합니다. 그러면 아무도 연결되어 있지 않다고 가정 할 때 재생이 중지 될 때 서비스가 삭제됩니다.

adb shell dumpsys activity services을 사용하여 서비스 상태를 볼 수 있습니다 (서비스 클래스의 이름을 선택적으로 추가하여 해당 클래스 만 필터링 할 수 있음).