В классе обслуживания:Почему Null Pointer при попытке использовать локальную службу Android?
class AeroBluetoothService extends Service { ...
private final IBinder asBleBinder = new LocalBinder();
public class LocalBinder extends Binder {
AeroBluetoothService getService() {
return AeroBluetoothService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return asBleBinder;
}
В клиенте Активность:
Intent bindAsBleIntent;
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
AeroBluetoothService.LocalBinder asBleBinder = (AeroBluetoothService.LocalBinder) service;
asBleServiceRef = asBleBinder.getService();
}
В OnCreate Клиента():
bindAsBleIntent = new Intent(getApplicationContext(), AeroBluetoothService.class);
bindService(bindAsBleIntent, /*ServiceConnection*/ this, Context.BIND_AUTO_CREATE);
Проблема в том, что, когда я пытаюсь вызвать службу от Заказчика:
asBleServiceRef.scanForAero();
ссылка на экземпляр службы, asBleServiceRef
, is null
. Как будто обратный вызов onServiceConnected()
не вызывается (или передает нулевой аргумент).
Я довольно тщательно скопировал этот код с примера Android. Я просто заметил, что пример вызывает bindService()
из его метода onStart()
, тогда как я звоню от onCreate()
. Может ли это иметь какое-то значение? В чем проблема?
post logcat output here –
Опубликовать код класса Activity, объявили ли вы службу в манифесте? – avinash
Бинго! Забыл все о манифесте. Я буду исследовать и добавлять. –