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