我正在尝试创建一个兼容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)
谢谢, 弗朗兹
答案 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。