当Service在启动时启动时,GoogleApiClient不会一致地进行回调

时间:2016-07-27 07:26:21

标签: android android-service google-api-client android-service-binding google-location-services

我正在处理的Android应用有两个服务 - ServiceAServiceB,前者启动后者。 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的方式,有两种情况:

  1. Bound并由活动开始。

    Intent serviceA = new Intent(context, ServiceA.class);
    bindService(serviceA, mConnection, Context.BIND_AUTO_CREATE);
    
  2. 在启动时,通过监听android.intent.action.BOOT_COMPLETED的BroadcastReceiver

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceA = new Intent(context, ServiceA.class);
        startWakefulService(context, serviceA);
    }
    
  3. 开始后,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版后,仍然没有回调。

0 个答案:

没有答案