在片段中使用enableAutoManage()

时间:2015-06-03 14:24:43

标签: android android-fragments google-places-api google-api-client

是否有另一种方法可以连接Google API客户端?

我使用自动完成的地方,我必须在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()时,我有很多关于投射的问题

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

4 个答案:

答案 0 :(得分:60)

如果您想使用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();
}

答案 1 :(得分:2)

很抱歉迟到的回复,但您可以扩展AppCompatActivity而不是扩展FragmentActivity ...

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

答案 2 :(得分:1)

如果您的片段在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();

答案 3 :(得分:0)

我的解决方案与接受的答案类似,不同之处在于,我使用Builder的第二个签名,以便将connectionFailedListener也发送到构造函数。

紧接着是onStart()和onStop()中的mGoogleApiClient.connect()和mGoogleApiClient.disconnect()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(this /*context*/ , this /*connectedListener*/, this /**connectionFailedListener/)
            .addApi(Places.GEO_DATA_API)
            .build();
}