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信息传递给它。
  • 从该服务中,显示需要验证的通知,点击该通知后,将用户带到活动身份验证并将结果发送到服务。

有可能有更多的方法去做,但我认为你理解这个想法。