Не удается подключиться к Google API CLient?
Я застрял на этом больше недели, и я не могу понять, что именно я делаю неправильно. Я прочитал следующие вопросы, ни один из которых, кажется, не работает для меня:
Неустранимое исключение: java.lang.IllegalStateException GoogleApiClient еще не подключен
GoogleApiClient выдает "GoogleApiClient еще не подключен" ПОСЛЕ вызова функции onConnected
Обратный вызов клиента Google API никогда не вызывается
Вызвано: java.lang.IllegalStateException: GoogleApiClient еще не подключен
Я пытаюсь использовать API LocationServices в сочетании с классом Geofence, чтобы проверить, находится ли пользователь в указанной области. Кажется, проблема заключается в связи с клиентом API Google и / или API Locationservices.
В своем манифесте я заявил следующее:
<service android:name=".GeofenceTransitionsIntentService" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="value of my key" />
</application>
В моем проекте объявлено 2 метода Java, которые взаимодействуют с GoogleApiClient:
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
public void startApiClient(){
if (mGoogleApiClient.isConnected()) {
Toast.makeText(this, getString(R.string.not_connected), Toast.LENGTH_SHORT).show();
return;
//Of course the Toast is supposed to fire of when the user cannot
//connect to the google api. However when I make this code to run
//when the user cannot connect to google play services it just shows
//the toast and does not report me the error which is why I in this
//case made this code to run when the user is connected to google play services
}
try {
LocationServices.GeofencingApi.addGeofences
(mGoogleApiClient, getGeofencingRequest(), getGeofencePendingIntent()).setResultCallback(this); // Result processed in onResult(). This is also the line where the app seems to crash because it is unable to connect to the google api client
} catch (SecurityException securityException) {
securityException.notify();
}
}
Затем я вызываю buildGoogleApiClient() в моем методе onCreate() и вызываю startApiClient() в моем методе onStart():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_drawer);
…
buildGoogleApiClient();
}
_
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
startApiClient();
}
И в случае необходимости, метод onResult():
public void onResult(Status status) {
if (status.isSuccess()) {
// Update state and save in shared preferences.
mGeofencesAdded = !mGeofencesAdded;
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.GEOFENCES_ADDED_KEY, mGeofencesAdded);
editor.apply();
}
Странная вещь в этом заключается в том, что соединение действительно создается в течение некоторого времени. Когда я говорю программе показывать тост, когда пользователь не подключен, мой монитор Android сообщает мне, что соединение установлено, но тост все еще срабатывает. Однако, когда я говорю программе показывать тост, когда пользователь подключен к клиенту Google API, приложение вылетает и сообщает, что клиент Google API еще не подключился.
Заранее спасибо за то, что уделили мне время и помогли мне с этим. Пожалуйста, прости меня, если я наблюдаю за чем-то очень очевидным.
1 ответ
Пожалуйста, попробуйте пройти этот урок по Google Client Location в AndroidHive - API определения местоположения Android, используя Сервисы Google Play.
Как обсуждалось в данном руководстве, вам необходимо внести изменения в свою деятельность ниже, чтобы получить текущее местоположение пользователя.
Сначала проверьте доступность Сервисов Google Play, позвонив по телефону
checkPlayServices()
вonResume()
Как только сервисы play станут доступны на устройстве, создайте GoogleApiClient, позвонив
buildGoogleApiClient()
метод.Подключитесь к клиенту Google API, позвонив по телефону
mGoogleApiClient.connect()
вonStart()
метод. Призвав это,onConnectionFailed()
,onConnected()
а такжеonConnectionSuspended()
будет срабатывать в зависимости от состояния соединения.После успешного подключения Google API,
displayLocation()
должен быть вызван вonConnected()
метод, чтобы получить текущее местоположение.
Кроме того, вы также можете проверить следующие возможные причины, по которым оповещения не работают должным образом, как указано в разделе Устранение неполадок входа в геозону. Это:
- Точное местоположение недоступно внутри вашей геозоны, или ваша геозона слишком мала.
- Wi-Fi выключен на устройстве. Убедитесь, что на вашем устройстве включен Wi-Fi и местоположение.
- В вашей геозоне нет надежного сетевого подключения.
- Оповещения могут быть поздно.
Важную информацию и примеры кодов можно найти в разделе Создание и мониторинг геозон и в данном руководстве.