我正在处理的Android
应用有两个服务 - ServiceA
和ServiceB
,前者启动后者。 ServiceB
使用GoogleAPIClient接收并向ServiceA
和其他客户提供位置作为意图。
我正在尝试使用GoogleAPIClient来获取ServiceB
上的位置,如下所示:
@Override
public void onCreate() {
mGoogleApiClient = new GoogleApiClient.Builder(ServiceB.this)
.addConnectionCallbacks(mConnectionCallbacks)
.addOnConnectionFailedListener(mOnConnectionFailedListener)
.addApi(LocationServices.API).build();
mGoogleApiClient.connect();
}
关于ServiceA
稍后开始ServiceB
的方式,有两种情况:
Bound并由活动开始。
Intent serviceA = new Intent(context, ServiceA.class);
bindService(serviceA, mConnection, Context.BIND_AUTO_CREATE);
在启动时,通过监听android.intent.action.BOOT_COMPLETED的BroadcastReceiver
。
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceA = new Intent(context, ServiceA.class);
startWakefulService(context, serviceA);
}
开始后,ServiceA
启动ServiceB
,如下所示:
Intent startIntent = new Intent(ServiceA.this, ServiceB.class);
startService(startIntent);
在两种情况下都启动了ServiceA和ServiceB。
一切适用于案例1(从Activity
开始),但在使用案例2(从启动时开始),在ServiceB启动并调用mGoogleApiClient.connect()
后,没有通知{{1} }和mOnConnectionFailedListener
,即使等了好几分钟。
我不明白使mConnectionCallbacks
最终无效的两种情况之间有什么区别,但我怀疑它与用于启动GoogleAPIClient
的上下文有关,如案例1为ServiceA
,案例2为Activity
提供Context
。
我需要帮助解决这个问题。
提前致谢。
更新1
我使用的是Google Play服务版本8.4.0
BroadcastReceiver
更新2
更改为9.2.1版后,仍然没有回调。