I\'m trying to get advertising ID from Google Play services API. Here is a sample code:
...
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
imp
Unfortunately the getAdvertisingIdInfo
call needs to be done from a background thread, you should not block the main thread while invoking it. Seems like there is no option to get the AdId synchronously.
---- EDIT----
I could achieve this by running on a new thread. Here is what finally work for me. It is not hanging anymore (May not be an ideal)
getGAIDSync(){
final CountDownLatch latch = new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
getGoogleAdsIDAsyncTask.execute().get(5000, TimeUnit.MilliSecond);
latch.countDown();
}}).start();
try {
latch.await(5000,TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
I found the reason. It shouldn't block onStart() handler because blocked context blocks Play API in ID settings obtaining. Fixed code looks like this:
@Override
protected void onStart() {
super.onStart();
Thread thr = new Thread(new Runnable() {
@Override
public void run() {
try {
Context ctx = MyActivity.this.getApplicationContext();
AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(ctx);
finished(adInfo);
} catch (...) {
// All exceptions blocks
}
finished(null);
}
});
thr.start();
}
private void finished(final AdvertisingIdClient.Info adInfo){
if(adInfo!=null){
// In case you need to use adInfo in UI thread
runOnUiThread(new Runnable() {
@Override
public void run() {
// Do some stuff with adInfo
}
});
}
}
It would be helpful if official instructions had such usage comments.