2009-04-27 12 views

Antwort

2

Dies entspricht der Remote-Schnittstelle, die Sie zwischen Ihrem Kontext und dem Dienst verwenden (im Remote-Aufruf-Szenario). Zum Beispiel können Sie wie folgt tun:

IBinder service = this.bindService(new Intent(TestService.class.getName())); 
assertNotNull(service); 
assertTrue(service instanceof ITestServiceCall); //see if the service returns the correct interface 
ITestServiceCall iTestServiceCall = ITestServiceCall.Stub.asInterface(service); 
assertNotNull(iTestServiceCall); 
iTestServiceCall.doSomething(); 

Die ITestServiceCall ist die Schnittstelle, die Sie in einer AIDL Datei definieren (ITestServiceCall.aidl).

Aber bevor dies funktioniert, müssen Sie sicherstellen, dass Ihr Dienst den Stub Ihrer Schnittstelle korrekt auf onBind() zurückgibt.

Ich hoffe, das kann helfen.

+0

Es ist eine schlechte Idee, den Binder direkt nach dem Aufruf von bindService zu testen. Diese Methode ist asynchron und gibt nichts Interessantes zurück, bevor die onServiceConnected-Funktion von ServiceConnection – Snicolas

+1

aufgerufen wird. In ServiceTestCase wird kein 'ServiceConnection.onServiceConnected()' verwendet, deshalb erhalten wir das IBinder-Objekt direkt nach dem 'bindService()'. Das ist anders als der tatsächliche Service-Fluss, denke ich. –