所以我发现了一些关于GoogleapClient的不太清楚的地方。
GoogleApiClient有一个名为onConnected的函数,该函数在客户端连接时运行(当然)
我有了自己的函数:startLocationListening,它最终被GoogleAppClient的onConnected函数调用
因此,如果没有GoogleAppClient连接,我的startLocationListening功能无法运行。
代码和日志:
@覆盖
未连接的公共空间(捆绑包){
日志(“Google_Api_客户端:已连接”);
initLocationRequest();
startLocationListening();//此函数中捕获异常
}
private void startLocationListening(){
日志(“开始位置侦听:现在”);
//以下为例外情况:
LocationServices.FusedLocationApi.RequestLocationUpdate(mgoogleapClient、mlLocationRequest、this);
}
例外情况是:
03-30 12:23:28.947:E/AndroidRuntime(4936):java.lang.IllegalStateException:GoogleAppClient尚未连接。
03-30 12:23:28.947:E/AndroidRuntime(4936):在com.google.android.gms.internal.jx.a(未知来源)
03-30 12:23:28.947:E/AndroidRuntime(4936):在com.google.android.gms.common.api.c.b(未知来源)
03-30 12:23:28.947:E/AndroidRuntime(4936):在com.google.android.gms.internal.nf.RequestLocationUpdate(未知来源)
03-30 12:23:28.947:E/AndroidRuntime(4936):在hu.company.testproject.service.GpsService.startLocationListening(GpsService.java:169)
03-30 12:23:28.947:E/AndroidRuntime(4936):在hu.company.testproject.service.GpsService.onConnected(GpsService.java:259)
我的调试日志还显示调用了onConnected函数:
03-30 12:23:28.847:I/Locationing\u GpsService(4936):Google\u Api\u客户端:已连接。
03-30 12:23:28.857:I/Locationing_GpsService(4936):初始化请求:立即初始化
03-30 12:23:28.877:I/Locationing_GpsService(4936):初始化位置请求:间隔_5000
03-30 12:23:28.897:I/Locationing_GpsService(4936):初始化位置请求:优先级_100
03-30 12:23:28.917:I/定位服务(4936):开始定位监听:现在
在这之后,我得到了一个例外
我是不是遗漏了什么?我得到了一个“已连接”的响应我运行了我的func,我得到了错误“未连接”这是什么?另外一件恼人的事是:我使用这个定位服务已经好几个星期了,但从来没有遇到过这个错误
E-D-it:
我添加了一个更具体的日志输出,让我大吃一惊,看看这个:
@覆盖
未连接的公共空间(捆绑包){
if(mgoogleapClient.isConnected()){
日志(“Google_Api_客户端:它是在(onConnected)函数上连接的,按它应该的方式工作。”);
}
否则{
日志(“Google_Api_客户端:它没有连接到(onConnected)函数上,它确实被窃听了。”);
}
initLocationRequest();
惊愕地听;
}
本例中的日志输出:
03-30 16:20:00.950:I/Locationing_GpsService(16608):谷歌Api_客户端:已连接。
03-30 16:20:00.960:I/Locationing_GpsService(16608):Google_Api_客户端:它未连接到(未连接)函数,它已被明确安装了错误。
是的,我刚刚得到了mgoogleapclient.isConnected()==false内部onConnected()这怎么可能
E-D-it:
由于没有人能回答这个问题,即使是声誉悬赏,我决定将此作为一个bug报告给谷歌。接下来发生的事情让我非常惊讶。
谷歌对我的报告的官方答复:
“此网站是为开发者提供AOSP Android源代码的问题
代码和开发者工具集,而不是谷歌应用程序或服务,例如
播放服务、GMS或谷歌API。不幸的是,似乎没有
是一个报告游戏服务错误的合适地方。我所能做的就是
我想说的是,这个网站不是,对不起。试着在谷歌上发布
取而代之的是产品论坛。”
完整的问题报告在这里。(我希望他们不会因为它很傻就把它拿走)
所以,是的,我看了谷歌产品论坛,就是找不到任何主题来发布这件事,所以现在我感到困惑和困惑
地球上有人能帮我吗?
E-D-it:
pastebin中的完整代码
我刚刚注意到您正在onStartCommand()中创建GoogleAppClient。这似乎是个坏主意
假设您的服务被触发两次。将创建两个GoogleAppClient对象,但您只能引用其中一个。如果您没有引用的客户端执行其对onConnected()的回调,则您将在该客户端中连接,但您实际拥有引用的客户端仍可能未连接
我怀疑这就是发生的事情。尝试将您的GoogleAppClient创建移动到onCreate,看看是否得到相同的行为