2016-07-22 30 views
0

在我的MainActivity之間的溝通我用服務和類

Intent serviceIntent = new Intent(this, myService.class); 
bindService(serviceIntent,serviceConn, Context.BIND_AUTO_CREATE); 

創建blutetooth連接服務,如果is.connect()返回true我想通過從服務到一個單獨的類的變量,而不使用廣播。如果我創建了CheckIfConnected() int服務,我該如何從一個單獨的類中調用它?

謝謝

回答

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); 
} 

這應該使你的服務或任何其他類別之間方便您的溝通!

我希望你得到它的工作 - 祝你好運,快樂的編碼!

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() { 
     ... 
    } 
} 
+0

用一個小例子編輯它,說明我想說什麼。 – h3X3n