观察 AppActivity.java:
public class AppActivity extends Cocos2dxActivity
启动的Activity是继承Cocos2dxActivity;
Cocos2dxActivity 存在 mFrameLayout,那就直接在里面设置个PopupWindow即可;
Activity本身空无一物,直接加上一下代码即可:
public class AppActivity extends Cocos2dxActivity { private AdView adView; private PopupWindow popUp; private static AppActivity _activity; private LinearLayout layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _activity = this; adView = new AdView(this); adView.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"); // 这里填自己的AdUnitId adView.setAdSize(AdSize.BANNER); adView.setAdListener(new AdmobListener()); // AdmobListener 中处理收到事件 } public static void showHideAdPopup() { // 静态方法供Native代码调用 _activity._showHideAdPopup(); } public void _showHideAdPopup() { if (popUp == null) { runOnUiThread(new Runnable() { @Override public void run() { try { popUp = new PopupWindow(_activity); popUp.setWidth(360); popUp.setHeight(50); popUp.setWindowLayoutMode(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); popUp.setClippingEnabled(false); layout = new LinearLayout(_activity); layout.setPadding(-10, -10, -10, -10); // 不加这句AdView可能会没有足够Size容纳加载不了 MarginLayoutParams params = new MarginLayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); params.setMargins(0, 0, 0, 0); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(adView, params); popUp.setContentView(layout); AdRequest adRequest = new AdRequest.Builder() .addTestDevice("xxxxxxxxxxxxxxxxxxxxxxxx") // 申明测试设备,不加乱点会被ban账号,在logcat中搜AdRequest可以看到 .build(); _activity.adView.loadAd(adRequest); popUp.showAtLocation(mFrameLayout, Gravity.BOTTOM, 0, 0); popUp.update(); } catch (Exception ex) { Toast.makeText(AppActivity.this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } } }); } else { // 再次调用隐藏 runOnUiThread(new Runnable() { @Override public void run() { layout.removeView(adView); popUp.dismiss(); popUp = null; } }); } } private class AdmobListener extends AdListener { @Override public void onAdClosed() { Log.d("", "Closed"); super.onAdClosed(); } @Override public void onAdFailedToLoad(int errorCode) { Log.d("", "Failed"); super.onAdFailedToLoad(errorCode); } @Override public void onAdLeftApplication() { Log.d("", "Left"); super.onAdLeftApplication(); } @Override public void onAdLoaded() { Log.d("", "Loaded"); super.onAdLoaded(); } @Override public void onAdOpened() { Log.d("", "Opened"); super.onAdOpened(); } } @Override public void onDestroy() { if (adView != null) { adView.destroy(); } super.onDestroy(); } }
Native 代码中通过cocos2d::JniHelper交互
记得判断CC_TARGET_PLATFORM,防止XCode编译ios时出错
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "platform/android/jni/JniHelper.h" const char* NativeActivityClassName = "org/cocos2dx/cpp/AppActivity"; #endif void AdmobHelper::showAds() { #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) cocos2d::JniMethodInfo t; if (cocos2d::JniHelper::getStaticMethodInfo(t , NativeActivityClassName , "showHideAdPopup" , "()V")) { t.env->CallStaticVoidMethod(t.classID, t.methodID); t.env->DeleteLocalRef(t.classID); } #endif }
近期评论