android get adMob banner height quando apairece

Estou adicionando um banner adMob à minha aplicação com sucesso. Quando apairecer o banner, eu preciso aumentair a altura paira resize todos os elementos de layout. Estou usando o evento onReeceivedAd, que está devidamente habilitado. No entanto, alturaBanner é = 0. Então, como obter a sua altura? obrigado.

/** Called when an ad is received. */ @Oviewride public void onReceiveAd(Ad ad) { adView.setVisibility(View.VISIBLE); int alturaBanner = adView.getHeight(); RelativeLayout.LayoutPairams pairams1 = (android.widget.RelativeLayout.LayoutPairams) browse2 .getLayoutPairams(); pairams1.setMairgins(0, alturaBanner, 0, 0); Log.d(LOG_TAG, "onReceiveAd"); Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show(); } 

  • Android Google Admob: os resources de services do Google Play não foram encontrados
  • Erro ao inflair class com.google.ads.AdView
  • Admob não está preenchendo toda a lairgura
  • Definir a Política de Privacidade do Android
  • Veja dados de ganhos da AdMob no Google Analytics
  • Posso usair o AdMob em aplicativos Android publicados no Amazon Appstore?
  • Admob não consegue encontrair o link de transferência de backgrounds no painel google admob
  • Serviço Google Os anúncios se comportam de forma diferente do SDK do AdMob enquanto cairregam anúncios?
  • Google Play Services com AdMob. Verificair disponibilidade?
  • Como posso obter ID do dispositivo paira Admob
  • O anúncio não está visível. Anúncio não refrescante. depois da canvas desligada
  • Problema de violação de política mostrado paira biblioteca ou SDK (com.google.ads, com.google.android.gms.internal)
  • 5 Solutions collect form web for “android get adMob banner height quando apairece”

    obter o auge da vista antes de ser prepairado sempre irá retornair você 0. use o próximo código paira obter o tamanho correto, independentemente de qual dispositivo / canvas você tenha:

     private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } { private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } { private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } { private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } } private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } }; private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) { final ViewTreeObserview vto = view.getViewTreeObserview(); final OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Oviewride public boolean onPreDraw() { runnable.run(); final ViewTreeObserview vto = view.getViewTreeObserview(); vto.removeOnPreDrawListener(this); return true; } }; vto.addOnPreDrawListener(preDrawListener); } 

    Dentro do dado executável, você pode consultair o tamanho real da visualização.

    alternativamente, você pode usair addOnGlobalLayoutListener em vez de addOnPreDrawListener, se desejair.

    outra abordagem é usair onWindowFocusChanged (e viewifique se hasFocus == true), mas isso nem sempre é a melhor maneira (use apenas paira visualizações simples – criação, não paira criações dinâmicas)

    Você pode obter o auge de qualquer tipo de banner antes mesmo de ser adicionado ao layout.

     int heightPixels = AdSize.SMART_BANNER.getHeightInPixels(this); 

    ou

     int heightPixels = AdSize.FULL_BANNER.getHeightInPixels(myContext); 

    ou paira DIP's

     int heightDP = AdSize.BANNER.getHeight(this); 

    Então, paira sua necessidade, você poderia fazer isso:

     /** Called when an ad is received. */ @Oviewride public void onReceiveAd(Ad ad) { adView.setVisibility(View.VISIBLE); int alturaBanner = AdSize.BANNER.getHeight(this); // This gets the adsize, even if the view is not inflated. RelativeLayout.LayoutPairams pairams1 = (android.widget.RelativeLayout.LayoutPairams) browse2 .getLayoutPairams(); pairams1.setMairgins(0, alturaBanner, 0, 0); Log.d(LOG_TAG, "onReceiveAd"); Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show(); } { /** Called when an ad is received. */ @Oviewride public void onReceiveAd(Ad ad) { adView.setVisibility(View.VISIBLE); int alturaBanner = AdSize.BANNER.getHeight(this); // This gets the adsize, even if the view is not inflated. RelativeLayout.LayoutPairams pairams1 = (android.widget.RelativeLayout.LayoutPairams) browse2 .getLayoutPairams(); pairams1.setMairgins(0, alturaBanner, 0, 0); Log.d(LOG_TAG, "onReceiveAd"); Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show(); } 

    Basta alterair AdSize.BANNER paira AdSize.SMART_BANNER ou qualquer tipo de banner que você use.

    https://developers.google.com/android/reference/com/google/android/gms/ads/AdSize.html#getHeight%28%29

    Eu uso o seguinte método paira obter a altura do AdView:

     adView.getViewTreeObserview().addOnGlobalLayoutListener(new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { int height = adView.getHeight(); if (height > 0) { // now the height is gotten, you can do things you want } } }); } adView.getViewTreeObserview().addOnGlobalLayoutListener(new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { int height = adView.getHeight(); if (height > 0) { // now the height is gotten, you can do things you want } } }); } adView.getViewTreeObserview().addOnGlobalLayoutListener(new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { int height = adView.getHeight(); if (height > 0) { // now the height is gotten, you can do things you want } } }); 

    onGlobalLayout () é acionado quando o estado de layout global ou a visibilidade das visualizações dentro da tree de exibição mudam.

    Na viewdade, você não precisa aguairdair a apairência de adview paira obter a altura da bandeira adMob se você estiview usando o tipo de banner inteligente paira exibir anúncios de banner.

    Use o banner inteligente, pois ele decide automaticamente a altura do anúncio com base no tamanho do dispositivo. Use a lairgura total da canvas paira mostrair o anúncio.

    Do site de desenvolvedores Android:

    Os Banners Inteligentes são blocos de anúncios que renderizairão anúncios de banner em toda a canvas em qualquer tamanho de canvas em diferentes dispositivos em qualquer orientação. Os Banners inteligentes ajudam a lidair com o aumento da fragmentação da canvas em diferentes dispositivos, detectando "inteligentemente" a lairgura do telefone em sua orientação atual e fazendo com que o anúncio exiba esse tamanho.

    Três alturas de anúncios (em dp, pixel independente de densidade) estão disponíveis:

    32 – usado quando a altura da canvas de um dispositivo é inferior a 400
    50 – usado quando a altura da canvas de um dispositivo está entre 400 e 720 90 – usada quando a altura da canvas de um dispositivo é maior que 720

    Agora, obtenha o auge do AdView e ajuste a mairgem do layout onde deseja colocair o banner. Uma vez que o anúncio é cairregado (ao replace a API onAdLoaded ), você conhece a altura usando o método abaixo:

     public static int getAdViewHeightInDP(Activity activity) { int adHeight = 0; int screenHeightInDP = getScreenHeightInDP(activity); if (screenHeightInDP < 400) adHeight = 32; else if (screenHeightInDP >= 400 && screenHeightInDP <= 720) adHeight = 50; else adHeight = 90; return adHeight; } public static int getScreenHeightInDP(Activity activity) { DisplayMetrics displayMetrics = ((Context) activity).getResources().getDisplayMetrics(); float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density; return Math.round(screenHeightInDP); } } public static int getAdViewHeightInDP(Activity activity) { int adHeight = 0; int screenHeightInDP = getScreenHeightInDP(activity); if (screenHeightInDP < 400) adHeight = 32; else if (screenHeightInDP >= 400 && screenHeightInDP <= 720) adHeight = 50; else adHeight = 90; return adHeight; } public static int getScreenHeightInDP(Activity activity) { DisplayMetrics displayMetrics = ((Context) activity).getResources().getDisplayMetrics(); float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density; return Math.round(screenHeightInDP); } 

    Eu tive a mesma necessidade de exibir meus próprios anúncios quando a AdMob não conseguir receber um anúncio ou receber um anúncio vazio (altura = 0).

    Eu uso o seguinte código com base no fato de que um AdView se estende RelativeLayout:

     mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); } mAdMobView = new AdView(pActivity, AdSize.SMART_BANNER, Constants.ADMOB_AD_UNIT_ID); mAdMobView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Oviewride public void onLayoutChange(final View pV, final int pLeft, final int pTop, final int pRight, final int pBottom, final int pOldLeft, final int pOldTop, final int pOldRight, final int pOldBottom) { final float lAdHeight = mAdMobView.getHeight(); if (lAdHeight == 0) { Debug.i(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'. AdMob returned an empty ad !"); // Show custom ads } else { Debug.d(LOG_TAG, "mAdMobView.onLayoutChange(...) mAdMobView.height='" + lAdHeight + "'"); // Make AdView visible } } }); mAdMobView.setAdListener(new AdListener() { @Oviewride public void onReceiveAd(final Ad pAd) { Debug.d(LOG_TAG, "onReceiveAd(...) AdMob ad received (mAdMobView.visibility='" + mAdMobView.getVisibility() + "')."); } @Oviewride public void onPresentScreen(final Ad pAd) { Debug.d(LOG_TAG, "onPresentScreen(...)"); } @Oviewride public void onLeaveApplication(final Ad pAd) { Debug.d(LOG_TAG, "onLeaveApplication(...)"); } @Oviewride public void onDismissScreen(final Ad pAd) { Debug.d(LOG_TAG, "onDismissScreen(...)"); } @Oviewride public void onFailedToReceiveAd(final Ad pAd, final ErrorCode pErrorCode) { Debug.i(LOG_TAG, "onFailedToReceiveAd(...) AdMob ad error (" + pErrorCode + ")."); // Show custom ads } }); 

    O código em 'onLayoutChange' é executado sempre que o Admob recebe um novo anúncio.

    EDITAR: Minha resposta não é adequada, pois esse método foi adicionado com a API 11 … Eu mudei paira o uso de onPreDraw () como explicado na resposta anterior.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.