在我的MainActivity中,我使用
Intent serviceIntent = new Intent(this, myService.class);
bindService(serviceIntent,serviceConn, Context.BIND_AUTO_CREATE);
创建一个blutetooth连接服务,如果is.connect()
返回true,我想在不使用广播器的情况下将服务中的变量传递给单独的类。如果我创建CheckIfConnected()
int服务,我如何从一个单独的类中调用它?
由于
答案 0 :(得分:1)
无缝通信且不紧密耦合应用程序代码的最简单方法,请尝试使用events
。我最喜欢的是EventBus - android library
。以下是如何做到这一点:
将此添加到build.gradle
文件(模块级)
compile 'org.greenrobot:eventbus:3.0.0'
接下来,创建一个Plain Old Java Object
(POJO)来代表您的活动!
public class ServiceConnectedEvent{
private boolean isServiceConnected;
ServiceConnectedEvent(boolean isConnected){
this.isServiceConnected = isConnected;
}
public boolean isServiceConnected{
return this.isServiceConnected;
}
}
接下来,在您的服务中,它将充当publisher
,发布如下事件:
EventBus.getDefault().post(new ServiceConnectedEvent(true));
现在,在要通知服务连接状态的类中,您可以将其注册为subscriber
,如下所示:
EventBus.getDefault().register(this);
要在班级中实际收到通知,请添加以下方法:
public void onEvent(ServiceConnectedEvent event){
if(event.isServiceConnected()){
//do what you need when service is connected
}
}
请记住,您可以将您想要的任何内容传回给您所选择的变量!
如果您在活动或片段中,可以在unregister
内onDestroy
举办活动:
@Override
public void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
这应该使您的服务和任何其他课程之间的沟通变得轻松!
我希望你能让它运转起来 - 祝你好运,编码愉快!
答案 1 :(得分:0)
也许你可以使用回调方法。
您可以创建自己的Intent类来扩展它,但拥有一个包含您想要调用的方法的接口。然后,您可以覆盖connect()
方法,然后在返回true
之前调用此接口方法。然后你必须让你的单独的类实现你的CustomIntent.ConnectInterface
并使它覆盖你的接口方法。
我认为如果我能正确理解你的问题,那可能会有用。
public class CustomIntent extends Intent {
public interface ConnectInterface {
public void connectInterfaceCallback();
}
private ConnectInterface callback;
public CustomIntent(ConnectInterface callback){
super();
this.callback = callback;
}
@Override
public boolean connect() {
if(super.connect()){
callback.connectInterfaceCallback();
return true;
} else {
return false;
}
}
}
然后:
public class SeparateClass implements CustomIntent.ConnectInterface {
...
@Override
public void connectInterfaceCallback() {
...
}
}