У меня есть следующий метод в Сервисе в моем приложении:
public void switchSpeaker(boolean speakerFlag){
if(speakerFlag){
audio_service.setSpeakerphoneOn(false);
}
else{
audio_service.setSpeakerphoneOn(true);
}
}
Таким образом, мой вопрос - то, что является лучшим и самым эффективным способом быть в состоянии использовать этот метод в Действии, любят, следует
final Button speaker_Button = (Button) findViewById(R.id.widget36);
speaker_Button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
switchSpeaker(true); //method from Service
}
});
Я должен сделать AIDL или есть ли более простой путь?
Вы должны предоставить клиентам метод сервиса switchSpeaker . Определите свой файл .aidl. Затем подключитесь к этой услуге из своей деятельности и просто позвоните по номеру switchSpeaker . См. документацию
Нет другого простого способа вызвать этот метод, только если он статический)
Это общедоступно, верно :)
Вы можете вызвать метод bindService (Intent). Взгляните на ApiDemos, класс LocalServiceBinding.
В методе обратного вызова onServiceConnected вы можете увидеть:
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
mBoundService = ((LocalService.LocalBinder)service).getService();
// Tell the user about this for our demo.
Toast.makeText(LocalServiceBinding.this, R.string.local_service_connected,
Toast.LENGTH_SHORT).show();
}
Теперь используйте объект службы (mBoundService) для вызова метода.
Вот и все :)