21

是否有另一种连接Google API客户端的方式?使用enableAutoManage()中的片段

我用自动完成的地方,我一定要使用此代码一些地方在MYFRAGMENT

mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this) 
       .addApi(Places.GEO_DATA_API) 
       .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this) 
       .addConnectionCallbacks(this).build(); 

我与

enableAutoManage(this, GOOGLE_API_CLIENT_ID, this) 
        .addConnectionCallbacks(this).build(); 

我不能处理它,因为当我更换this问题getActivity()我有很多铸造问题

感谢您的帮助和抱歉,如果这个问题很愚蠢。

+0

其中 “这个” 你更换?只是第一个?你的活动是否是FragmentActivity? –

+0

enableAutoManage()中的第一个“this”我有一个错误,我通过捕获到FragmentActivity修复它,但是当它运行应用程序时,它停止了 –

+0

没有我的MainActivity不是FragmentActivity –

回答

54

如果你想使用enableAutoManage那么你必须让你的活动延伸FragmentActivity。它所做的回调是GoogleApiClient自动管理工作所必需的。所以最简单的解决方案是将extends FragmentActivity添加到您的活动中。然后,您的投射不会失败,并导致应用程序在运行时崩溃。

另一种解决方案是自己管理api客户端。您将从构建器中删除enableAutoManage行,并确保自己从客户端connect/disconnect。最常见的做法是onStart()/onStop()。喜欢的东西...

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this) 
      .addApi(Places.GEO_DATA_API) 
      .addConnectionCallbacks(this).build(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mGoogleApiClient.disconnect(); 
} 
+5

它真的只是连接/断开?通过查看GoogleApiClient来源,它似乎做了比这更多的事情。我无法确定,因为很难阅读它们的混淆代码。我只是不想从'FragmentActivity'扩展,因为我的应用程序不支持旧的API级别。从'FragmentActivity'扩展也带来了更多的问题(带有动画,不同的FragmentManager和LoaderManager.LoaderCallbacks),所以我最好留在'Activity'中。但我想模仿'enableAutoManage()'的确切行为。 –

+0

[GoogleApiClient](https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient)的文档建议除了启动和停止行为外,还会尝试还处理一些连接错误。如果你没有启用自动管理器,那么你必须在你添加到客户端的'GoogleApiClient.ConnectionCallbacks'中自己添加这个逻辑。很难说在这些情况下他们采取了哪些具体行动。 –

+0

而事情是:谷歌提供的示例代码使用AppCompatActivity而不是片段,但仍然使用'enableAutoManage'。怎么会这样? – Moritz

0

如果您正在使用内部Fragment这段代码,让我们假设你有一个HomeFragment延伸android.support.v4.app.Fragment,那么你的类中HomeFragment你应该有:

HomeFragment homeFragmentContext; 
enableAutoManage(getActivity, GOOGLE_API_CLIENT_ID, homeFragmentContext) 
       .addConnectionCallbacks(homeFragmentContext).build(); 
0

如果您的片段在FragmentActivity运行,或AppCompatActivity你可以做这样的事情:为后期重新

 mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
      .enableAutoManage((FragmentActivity) getActivity() /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
        // your code here 
       } 
      }) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
1

对不起层但不是延长FragmentActivity可以延长AppCompatActivity ...

public class YourActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener 

.....

mCredentialsApiClient = new GoogleApiClient.Builder(context) 
        .addConnectionCallbacks(this) 
        .enableAutoManage(this,this) 
        .addApi(Auth.CREDENTIALS_API) 
        .build();