无法连接到 Google API 客户端?

Posted

技术标签:

【中文标题】无法连接到 Google API 客户端?【英文标题】:Unable to connect to Google API CLient? 【发布时间】:2016-12-08 09:06:24 【问题描述】:

我已经坚持了一个多星期了,我似乎无法弄清楚我到底做错了什么。我已阅读以下问题,但似乎都不适合我:

Fatal Exception: java.lang.IllegalStateException GoogleApiClient is not connected yet

GoogleApiClient is throwing "GoogleApiClient is not connected yet" AFTER onConnected function getting called

google api client callback is never called

Caused by: java.lang.IllegalStateException: GoogleApiClient is not connected yet

我想要做的是结合使用 LocationServices API 和 Geofence 类来检查用户是否在指定区域。问题似乎在于与 Google API 客户端和/或 Locationservices API 的通信。

我在清单中声明了以下内容:

<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 个与 GoogleApiClient 交互的 Java 方法:

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

然后我在我的 onCreate() 方法中调用 buildGoogleApiClient() 并在我的 onStart() 方法中调用 startApiClient():

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

关于此的奇怪之处在于,连接实际上确实会实例化一段时间。当我告诉程序在用户未连接时显示 Toast 时,我的 Android 监视器告诉我已建立连接,但 Toast 仍然被触发。但是,当我告诉程序在用户连接到 Google API 客户端时显示 Toast 时,应用程序崩溃并告诉我 Google API 客户端尚未连接。

提前感谢您抽出时间来帮助我解决这个问题。如果我监督了一些非常明显的事情,请原谅我。

【问题讨论】:

【参考方案1】:

请尝试阅读 AndroidHive 中的 Google 客户端位置教程 - Android Location API using Google Play Services。

如给定教程中所述,您需要在活动中进行以下更改以获取用户的当前位置。

    首先通过在onResume() 中调用checkPlayServices() 检查Google Play 服务的可用性

    在设备上提供播放服务后,通过调用 buildGoogleApiClient() 方法构建 GoogleApiClient。

    通过在onStart() 方法中调用mGoogleApiClient.connect() 连接到google api 客户端。通过调用此函数,将根据连接状态触发onConnectionFailed()onConnected()onConnectionSuspended()

    google api连接成功后,应在onConnected()方法中调用displayLocation()获取当前位置。

此外,您还可以检查以下可能导致警报无法按Troubleshoot the Geofence Entrance Event 中给出的预期工作的原因。它们是:

您的地理围栏内没有准确的位置,或者您的地理围栏太小。 设备上的 Wi-Fi 已关闭。确保您的设备已启用 wifi 和位置信息。 您的地理围栏内没有可靠的网络连接。 警报可能会延迟。

重要信息和示例代码可以在Creating and Monitoring Geofences 和给定的教程中找到。

【讨论】:

以上是关于无法连接到 Google API 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 Google API 客户端、GooglePlayServices

连接到 Google API 客户端时出现问题

无法连接到 kubernetes python api - .kube/config 文件未找到

我的网络服务无法连接到 android api 30

Asmack 18 连接:google.com:5222 异常:无法连接到 talk.google.com 远程服务器超时

无法连接到 Heroku API,请检查互联网连接并重试