android aidl, не можете привязать к сервису?

1

Кто-нибудь знает почему?

Мероприятия

    private IExternalDeviceScannerService myService = null;
private ServiceConnection serviceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName arg0, IBinder arg1) {
        // TODO Auto-generated method stub
        myService = IExternalDeviceScannerService.Stub.asInterface(arg1);
    }

    public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub
    }
};
    ......
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = new Intent(this, ExternalDeviceScannerService.class);
    bindService(intent, serviceConnection,
            Context.BIND_AUTO_CREATE);
    ....

обслуживание

class ScannerServiceAIDL extends IExternalDeviceScannerService.Stub {
.......
}
    @Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return new ScannerServiceAIDL();
}

Моя деятельность никогда не подключалась к сервису, даже я ждал несколько секунд!

  • 1
    Вы объявили службу в вашем AndroidManifest.xml?
  • 0
    Проверьте возвращаемое значение bindService (..), оно вернет true если вы правильно определили службу и будет ли установлено соединение со службой.
Показать ещё 2 комментария
Теги:
aidl

1 ответ

1

Я проверил ваш код и выполнил код без каких-либо проблем. Я думаю, вы допустили ошибку в своем проекте. Мой успешно выполненный код приведен ниже.

IExternalDeviceScannerService.aidl

package com.example.aidltest;

interface IExternalDeviceScannerService
{
    int getIntValue();
}

manifest.xml

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
     >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".ExternalDeviceScannerService"></service>
</application>

Мероприятия

private IExternalDeviceScannerService myService = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent(this, ExternalDeviceScannerService.class);
    // Bind service here
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}

protected void onDestroy() {
    super.onDestroy();
    unbindService(mConnection);
    myService = null;
}

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        myService = IExternalDeviceScannerService.Stub.asInterface(service);
        if (myService != null){
            try {
                Log.i("Value from AIDL", myService.getIntValue() +  "");
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }            
    }

    public void onServiceDisconnected(ComponentName className) {
        myService = null;
    }
};

обслуживание

public class ExternalDeviceScannerService extends Service {

    private static final String LOG_TAG = "Service";

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(LOG_TAG, "Service Started.");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(LOG_TAG, "Service Stopped.");
    }

    final class ScannerServiceAIDL extends IExternalDeviceScannerService.Stub {
        public int getIntValue() throws RemoteException {
            return 20;
        }
    }
    @Override
    public IBinder onBind(Intent intent) {
        Log.i(LOG_TAG, "Service Bound.");
        return new ScannerServiceAIDL();
    }   
}

Получайте удовольствие от AIDL !!! благодаря

Ещё вопросы

Сообщество Overcoder
Наверх
Меню