2010-12-05 2 views
1

Я пытаюсь разработать базовую службу AIDL на Android 2.2.1. Кажется, что все построено и установлено нормально, но bindService() просто не будет - ну, привяжите. Мой класс ServiceConnection не вызывается. Я действительно не знаю, почему нет, поэтому любая помощь будет оценена по достоинству. Вот мой клиент активность:Android: bindService не будет подключаться к удаленному (AIDL) сервису, и я не знаю, почему

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(); 
} 
+1

Используйте `adb logcat`, DDMS или перспективу DDMS в Eclipse, чтобы проверить LogCat и посмотреть, есть ли какие-либо предупреждения в течение и во время вызова` bindService() `. Наиболее вероятным предупреждением, IMHO, является то, что Android не может найти службу. Это может быть связано с тем, что вы либо не имеете его в своем манифесте, либо ваш `<намерение-фильтр>` не соответствует вашему `Intent`, переданному` bindService() `. – CommonsWare 2010-12-05 01:34:43

ответ

2

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

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

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

Смежные вопросы