簡體   English   中英

在服務和類之間進行交流

[英]Communicate between Service and a Class

在我的MainActivity中,

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

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

謝謝

嘗試無縫通信且無需緊密耦合應用程序代碼的最簡單方法就是嘗試使用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
   }
}

請記住,您可以像選擇的變量一樣傳遞任何想要的信息!

如果您處於活動或片段中,則可以在onDestroy unregister該事件:

@Override
public void onDestroy(){
   super.onDestroy();

   EventBus.getDefault().unregister(this);
}

這應該使您的服務和任何其他課程之間的溝通變得容易!

希望您能正常使用-祝您好運,並祝您編程愉快!

也許您可以使用回調方法。 您可以創建自己的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() {
      ...
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM