I'm using the basic example to add ads interstitial ads in my app with admob and firebase:
public class MainActivity extends ActionBarActivity {
InterstitialAd mInterstitialAd;
Button mNewGameButton;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNewGameButton = (Button) findViewById(R.id.newgame_button);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.setAdListener(new AdListener() {
#Override
public void onAdClosed() {
requestNewInterstitial();
beginPlayingGame();
}
});
requestNewInterstitial();
mNewGameButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
beginPlayingGame();
}
}
});
beginPlayingGame();
}
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
.build();
mInterstitialAd.loadAd(adRequest);
}
private void beginPlayingGame() {
// Play for a while, then display the New Game Button
}
}
Now, I have two activities (A and B) . I want when Activity A is open, load the ads, and when Activity B is open, show the same ads loaded in A, Please help me and sorry for my bad English! I ask in this language because the English community is more effective
It seems ok for me. The ad is displayed after buttton click, if its loaded. So in case you start B activity in beginPlayingGame all will be ok. Fact that ad is started from A activity not B is detail.
Did you want somethink else?
Of course, it is possible.
You have to store interstitial instance somewhere outside the Activity class (e.g. in Application class static variable) and implement listener outside this Activity.
That's it!
Related
I'm updating one of my Android apps but I'm finding some problems concerning AdMob implementation (which was working well on previous versions).
This is my code:
public class Edition extends AppCompatActivity {
private InterstitialAd mInterstitialAd;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edition);
mInterstitialAd = new InterstitialAd(this); //ERROR
mInterstitialAd.setAdUnitId(getString(R.string.full_screen_test_ad));
mInterstitialAd.loadAd(new AdRequest.Builder().build());
mInterstitialAd.setAdListener(new AdListener() {
#Override
public void onAdClosed() {
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
});
}
}
The initialize() method is called during my MainActivity.
But the following error appears on the marked line:
'InterstitialAd' is abstract; cannot be instantiated
Thanks in advance for any comment you can have!
I have 3 activity A, B, and C and I am showing interstitial ad in activity B. But problem is if I instantly back in activity A, interstitial appear in activity A. If I instantly go next activity C, interstitial appear in activity C. But I want interstitial will show only in activity B. Google haven't accept my app update for this reason.
try this way
InterstitialAd mInterstitial = new InterstitialAd(this);
mInterstitial.setAdUnitId(getResources().getString(Your_init_id));
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitial.setAdListener(new AdListener() {
#Override
public void onAdLoaded() {
Log.d("==","onAdLoaded");
mInterstitial.show();
}
#Override
public void onAdFailedToLoad(int errorCode) {
// Code to be executed when an ad request fails.
Log.d("==","onAdFailedToLoad"+errorCode);
moveToOtherActivity();
}
#Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
}
#Override
public void onAdLeftApplication() {
// Code to be executed when the user has left the app.
}
#Override
public void onAdClosed() {
// Code to be executed when when the interstitial ad is closed.
Log.d("==","onAdClosed");
moveToOtherActivity();
}
});
mInterstitial.loadAd(adRequest);
}
private void moveToOtherActivity() {
Intent intent;
intent = new Intent(this,Activity_which_you_want_to_display_after_interstitial .class);
startActivity(intent);
finish();
}
There is a way to hide an interstitial discussed in this post
This doesn't prevent it from appearing, it just closes it.
Hope it helps
I am trying to add interstitial ads to my game. It is built on a framework from a book. The constructor is:
public GameScreen(Game game) {
super(game);
world = new World();
clueLetters = new String[10];
levelNo = SettingsObject.levelUnlock;
getWord();
interstitialAd = new InterstitialAd(AndroidGame.context);
interstitialAd.setAdUnitId("ca-app-pub-1861496496821617/");
//Create an ad request
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
AndroidGame.activityReference.runOnUiThread(new Runnable() {
#Override
public void run()
{
// Set AdListener
interstitialAd.setAdListener(new AdListener() {
#Override
public void onAdClosed() {
super.onAdClosed();
}
});
}
});
Looper.prepare();
interstitialAd.loadAd(adRequestBuilder.build());
}
However, I get the error:
java.lang.IllegalStateException: setAdListener must be called on the main UI thread.
Can you tell me why I am getting that error and how to fix it, please?
I use the a similar/same framework. The best way is to set up the interstitial ads in the AndroidGame activity class and use an interface to show the ads in your game screen:
First create the interface class:
public interface MyActivityListener {
public void showInterstitial();
}
Then in your AndroidGame class, implement the interface:
public abstract class AndroidGame extends Activity implements Game, MyActivityListener {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
interstitialAd = new InterstitialAd(AndroidGame.context);
interstitialAd.setAdUnitId("ca-app-pub-1861496496821617/");
//Create an ad request
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
interstitialAd.loadAd(adRequestBuilder.build());
// Set AdListener
interstitialAd.setAdListener(new AdListener() {
#Override
public void onAdClosed() {
super.onAdClosed();
}
});
}
#Override
public void showInterstitial() {
runOnUiThread(new Runnable() {
#Override
public void run() {
if(interstitialAd != null && interstitialAd.isLoaded())
interstitialAd.show();
}
});
}
}
With this, any time you want to show ads in any screen, you just get call the showInterstitial() method. Example in your game screen:
public class GameScreen extends Screen{
MYActivityListener mL;
public GameScreen(Game game) {
super(game);
mL = (MyActivityListener)game;
world = new World();
clueLetters = new String[10];
levelNo = SettingsObject.levelUnlock;
getWord();
mL.showInterstitial();
}
}
I use this implementation to do all work that requires running on the UI thread (hide and show banner ads, rate/share app, storing scores etc. Hope it helps :)
Im trying to get a InterstitialAd into my application.
It works now,
However:
1) I always get a small gray bar displayed on top of the screen during the ad is loading
2) The ad takes really long to load
any ideas how to fix these two problems?
BannerActivity:
public class BannerActivity extends Activity{
private InterstitialAd mInterstitialAd;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-XXXXXX");
requestNewInterstitial();
mInterstitialAd.setAdListener(new AdListener() {
#Override
public void onAdLoaded(){
mInterstitialAd.show();
}
#Override
public void onAdClosed() {
finish();
}
});
}
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder().addTestDevice("XXXXXXXXXXXX").build();
mInterstitialAd.loadAd(adRequest);
}
}
How i load the banner:
Intent bannerIntent = new Intent(myContext, BannerActivity.class);
myContext.startActivity(bannerIntent);
xml:
android:name="kletzgames.crazyballs.BannerActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="#android:style/Theme.Translucent" />
I fixed it:
I now call the Ad during another View so it can load, and ones it loaded it will be displayed during screenTransaction.
AdRequest adRequest = new AdRequest.Builder().addTestDevice("XXXX").build();
mInterstitialAd.loadAd(adRequest);
** some if's **
mInterstitialAd.show();
I am using andengine and I am switching between two scenes. My intention is to put an interstitial ad between the transition. This is my code so far:
public void showGameOver(){
mainactivity=new MainActivity();
mainactivity.runOnUiThread(new Runnable(){
#Override
public void run() {
// TODO Auto-generated method stub
interstitial = new InterstitialAd(mainactivity);
interstitial.setAdUnitId("MY AD UNIT ID");
AdRequest adRequest = new AdRequest.Builder().build();
interstitial.loadAd(adRequest);
if (interstitial.isLoaded()) {
interstitial.show();
}
}
});
interstitial.setAdListener(new AdListener() {
#Override
public void onAdLoaded() {
}
#Override
public void onAdClosed() {
// Proceed to the next level.
setCurrentScene(gameover);
res.engine.setScene(gameover);
gameover.loadResources();
gameover.create();
}
});
}
The above code( without the interstitial ad code) switches to my gameover scene. When I put the interstitial ad code, my app crashes. The interstitial ad is supposed to show the ad, and when it closes, my gameover scene should show. I put in the correct ad unit id.
Logcat says: cannot create handler inside thread that has not called looper.prepare().
I searched this up and solutions state that I must put it on the runonuithread method, which I did.
Any help will be appreciated.
You can't instantiate a new activity via mainactivity=new MainActivity(); and use that. Instead you should pass the game's underlying activity to your gameOver() method and use that:
public void showGameOver(Activity yourActivity){
yourActivity.runOnUiThread(new Runnable(){
#Override
public void run() {
// TODO Auto-generated method stub
interstitial = new InterstitialAd(mainactivity);
interstitial.setAdUnitId("MY AD UNIT ID");
AdRequest adRequest = new AdRequest.Builder().build();
interstitial.loadAd(adRequest);
if (interstitial.isLoaded()) {
interstitial.show();
}
}
});