ConnectionResult.SUCCESS但仍然获得GooglePlayServicesNotAvailableException

时间:2016-09-07 07:19:17

标签: android google-play-services

我正在尝试创建一个兼容Android SDK 19(Kitkat)的应用,可以生成唯一ID。我目前正在使用com.google.android.gms:play-services:7.0.0(因为我发现它与Kitkat兼容),我的代码看起来像这样

final int answer = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
if (answer != ConnectionResult.SUCCESS) {
    Log.w(TAG, "Google Play Services is NOT available. Status Code is " + answer);
    return null;
}

// running in async
try {
    final AdvertisingIdClient.Info advertisingIdInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
    return advertisingIdInfo.getId();
} catch (Exception e) {
    Log.w(TAG, "Unable to generate Advertising id info due to " + e.getMessage());
    e.printStackTrace();
}

在针对我的模拟器(Nexus 5 + Android 19 + Intel x86)运行时,我在if语句中收到ConnectionResult.SUCCESS,但仍然获得GooglePlayServicesNotAvailableException

我想知道为什么,但似乎无法弄明白。

任何想法为什么?

  

W / my.Class(2376):由于null

而无法生成广告ID信息      

W / System.err(2376):com.google.android.gms.common.GooglePlayServicesNotAvailableException

     

W / System.err(2376):at com.google.android.gms.ads.identifier.AdvertisingIdClient.j(Unknown Source)

     

W / System.err(2376):at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(Unknown Source)

     

W / System.err(2376):at my.Class $ 1 $ 1.doInBackground(Z.java:115)

     

W / System.err(2376):在android.os.AsyncTask $ 2.call(AsyncTask.java:288)   W / System.err(2376):at java.util.concurrent.FutureTask.run(FutureTask.java:237)

     

W / System.err(2376):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)

     

W / System.err(2376):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)

     

W / System.err(2376):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)<

     

W / System.err(2376):at java.lang.Thread.run(Thread.java:841)

谢谢, 弗朗兹

1 个答案:

答案 0 :(得分:0)

这可能是因为GooglePlayServicesUtil类中的大多数方法都被弃用,包括[isGooglePlayServicesAvailable][1]。您可以使用以下给定的代码来检查Google Play服务的可用性。

private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "This device is not supported.");
                finish();
            }
            return false;
        }
        return true;
}

更新: - 您需要将播放服务版本从 7.0.0 升级到 8.4.0 才能使用上面给出的代码。另请查看this answer。