2017-08-04 78 views
0

我正在開發一個服務來與活動進行交流並且分割遊戲流。谷歌認證服務

但我的問題是,如果我打電話給mGoogleApiClient.connect(),如果我通過服務調用它,我該如何顯示Google自動顯示在活動中的對話框?

這是我的服務類:

public class MultiplayerService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

public GoogleApiClient mGoogleApiClient; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    mBus.register(this); 
    initGoogleClient(); 
} 

... 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    mEventPoster.postEventSafely(new BusEvent.UserLogged()); 
} 

@Override 
public void onConnectionSuspended(int i) { 
    mGoogleApiClient.connect(); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    mEventPoster.postEventSafely(new BusEvent.LogInFailed()); 
} 

@Subscribe 
public void onLogginClicked(BusEventActivity.LogInClicked event) { 
    mGoogleApiClient.connect(); 
    mEventPoster.postEventSafely(new BusEvent.UserLogged()); 
} 
... 

這可能嗎?

回答

1

服務不能顯示對話框,因爲它們不是UI組件。他們也不能開始活動。

我怎麼能證明谷歌自動在活動中顯示當我打電話mGoogleApiClient.connect()的對話框,如果林稱它的業務的?

不用擔心如何在服務中執行此操作,而是在活動的上下文中正確執行操作。有一些選項。

  • 將服務綁定到一個活動並讓他們傳遞auth信息。活動將負責auth部分(可能根據服務請求)並將信息發送到服務。
  • 在啓動服務之前,請執行auth部分的活動,並將auth信息傳遞給它。
  • 從該服務中,顯示需要驗證的通知,點擊該通知後,將用戶帶到活動身份驗證並將結果發送到服務。

有可能有更多的方法去做,但我認爲你理解這個想法。