Я пытаюсь разработать базовую службу AIDL на Android 2.2.1. Кажется, все собирается и устанавливается нормально, но bindService() просто не будет -- ну, свяжется. Мой класс ServiceConnection не вызывается. Я действительно понятия не имею, почему нет, поэтому любая помощь будет оценена по достоинству. Вот моя клиентская активность:
public class go extends Activity {
protected static final String TAG = "HOSPlayerClient";
private IHOSPlayerService hosPlayerService = null;
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Log.v(TAG, "onServiceConnection");
hosPlayerService = IHOSPlayerService.Stub.asInterface(service);
callService();
}
public void onServiceDisconnected(ComponentName name) {
Log.v(TAG, "onServiceDisconnected");
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v(TAG, IHOSPlayerService.class.getName());
boolean bound = bindService(
new Intent(IHOSPlayerService.class.getName()),
serviceConnection, Context.BIND_AUTO_CREATE);
Log.v(TAG, bound ? "service bound" : "service bind failed");
}
private void callService() {
try {
hosPlayerService.go();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
... и вот то, что я считаю важными частями моего сервиса AIDL:
public class HOSPlayerService extends Service
{
private static final String TAG = "HOSPlayerService";
public class HOSPlayerServiceImpl extends IHOSPlayerService.Stub
{
public void go() throws RemoteException
{
Log.v(TAG, "go called");
}
}
@Override
public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub
return new HOSPlayerServiceImpl();
}
}
... и файл AIDL:
package com.HOS.ahos.HOSPlayerService;
interface IHOSPlayerService
{
void go();
}
adb logcat
, DDMS или перспективу DDMS в Eclipse, чтобы проверить LogCat и посмотреть, нет ли каких-либо предупреждений во время вашего вызоваbindService()
и во время него. Наиболее вероятное предупреждение, ИМХО, заключается в том, что Android не может найти службу. Это может быть связано с тем, что его либо нет в вашем манифесте, либо ваш<intent-filter>
не соответствует вашемуIntent
, переданномуbindService()
. - person CommonsWare   schedule 05.12.2010