Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


AdvertisingIdClient getAdvertisingIdInfo se bloquea para siempre

Estoy intentando obtener el ID de publicidad de la API de servicios de Google Play. Aquí hay un ejemplo de código:

... import com.google.android.gms.ads.identifier.AdvertisingIdClient; import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.common.GooglePlayServicesRepairableException; ... public class MyActivity extends Activity { @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); } catch (IllegalStateException e) { e.printStackTrace(); } catch (GooglePlayServicesRepairableException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } }); thr.start(); synchronized (thr) { try { thr.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } } 

Cuando llamo método getAdvertisingIdInfo, la aplicación cuelga para siempre (no importa con el depurador o no).

  • La conversión al formato de Dalvik falló con error 1 - Exportación de APK
  • FillAfter y fillEnabled no funcionan en la animación de vista de Android XML
  • Hacer referencia a una cadena XML en una matriz XML (Android)
  • Java.lang.IllegalStateException: El hijo especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • ¿Cómo puedo simular el acelerómetro en el emulador de Android?
  • @Named proveedores con los mismos tipos de retorno terminan dando java.lang.IllegalArgumentException: Duplicar
  • Estoy utilizando Windows ADT 22.3, Android SDK API 19, Google Play SDK rev. 16, Android 4.4.2 Dispositivos Nexus. Estoy integrando API como se describe aquí: https://developer.android.com/google/play-services/id.html

    ¿Cuál podría ser una razón?

  • "No se puede ejecutar dex: límite de sobrecarga de GC superado"
  • Atributo layout_weight en la etiqueta <include>
  • Aplicación de depuración en Galaxy S5
  • Cómo enviar correo electrónico con datos adjuntos mediante GmailSender en android
  • Fuentes CSS en Android
  • Java.lang.RuntimeException: No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ();
  • 2 Solutions collect form web for “AdvertisingIdClient getAdvertisingIdInfo se bloquea para siempre”

    Encontré la razón. No debe bloquear el controlador onStart () porque los bloques de contexto bloqueados reproducen API en la configuración de ID. El código fijo se parece a esto:

     @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 } }); } } 

    Sería útil que las instrucciones oficiales tuvieran tales comentarios de uso.

    Desafortunadamente la llamada de getAdvertisingIdInfo necesita ser hecha de un hilo de fondo, usted no debe bloquear el hilo principal mientras que lo invoca. Parece que no hay opción para obtener el AdId sincrónicamente.

    —- EDIT —-

    Podría lograr esto ejecutando en un nuevo hilo. Esto es lo que finalmente funciona para mí. No está colgando más (puede no ser un 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(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.