Подтвердить что ты не робот

Использование enableAutoManage() в фрагменте

Есть ли другой способ подключения клиента 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(), у меня много проблем с литьем

спасибо за помощь и извините, если этот вопрос глупо.

4b9b3361

Ответ 1

Если вы хотите использовать 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();
}

Ответ 2

Извините за поздний ответ, но вместо расширения 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();

Ответ 3

Если ваш фрагмент работает в 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();

Ответ 4

Если вы используете этот код внутри Fragment, скажем, у вас есть HomeFragment, которые расширяют android.support.v4.app.Fragment, а затем внутри вашего класса HomeFragment вы должны иметь:

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

Ответ 5

Мое решение похоже на принятый ответ, за исключением того, что я использую вторую сигнатуру Builder, чтобы connectionFailedListener также отправлялся конструктору.

Далее следуют mGoogleApiClient.connect() и mGoogleApiClient.disconnect() в onStart() и onStop() соответственно

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