1 Создайте интерфейс, который объявляет всю сигнатуру метода, которую вы хотите вызвать из Activity:
public interface ILocationService {
public void StartListenLocation(Location location);
}
2 Сделайте так, чтобы ваше связующее устройство реализовало ILocaionService и определило фактическое тело метода:
public class MyBinder extends Binder implements ILocationService {
... ...
public void StartListenLocation(Location location) {
// implement your method properly
}
... ...
}
3 В действиях, связанных с услугой, укажите привязку к интерфейсу:
... ...
ILocationService mService; // communication is handled via Binder not the actual service class.
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mService = (ILocationService) service;
}
... ...
};
... ...
// At some point if you need call service method with parameter:
Location location = new Location();
mService.StartListenLocation(location);
Все взаимодействия (то есть вызов метода к вашей службе) должны обрабатываться и выполняться через инициализатор и возврат класса связывателя в ServiceConnection.onServiceConnected (), а не фактический класс обслуживания (binder.getService () не требуется). Вот как связываются сервисы связи, предназначенные для работы в API.
Обратите внимание, что bindService () является асинхронным вызовом. После вызова bindService () и до того, как система обратного вызова ServiceConnection.onServiceConnected () подключится к системе, будет задержка. Таким образом, лучшее место для выполнения метода обслуживания - это сразу же после инициализации mService в методе ServiceConnection.onServiceConnected ().
Надеюсь, это поможет.