Android: bindService не подключается к удаленной (AIDL) службе, и я понятия не имею, почему

Я пытаюсь разработать базовую службу 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();
}

person jmzorko    schedule 05.12.2010    source источник
comment
Используйте adb logcat, DDMS или перспективу DDMS в Eclipse, чтобы проверить LogCat и посмотреть, нет ли каких-либо предупреждений во время вашего вызова bindService() и во время него. Наиболее вероятное предупреждение, ИМХО, заключается в том, что Android не может найти службу. Это может быть связано с тем, что его либо нет в вашем манифесте, либо ваш <intent-filter> не соответствует вашему Intent, переданному bindService().   -  person CommonsWare    schedule 05.12.2010
comment
Имя пакета и имя файла одинаковы в двух приложениях?   -  person johann    schedule 01.04.2013


Ответы (1)


Попробуйте поместить в сервисный файл следующий код -

@Override
public IBinder onBind(Intent arg0) {
    //arg0.getExtras();
    return binder;
}

Служба должна возвращать связующее, тогда будет вызываться только ваш класс MyServiceConnection.

person Prateek Jain    schedule 05.12.2010