我正在尝试向我的游戏添加插页式广告。它建立在书本的框架之上。构造函数是:
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());
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
java.lang.IllegalStateException: setAdListener must be called on the main UI thread.
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么我会收到这个错误以及如何解决它吗?
我使用类似/相同的框架。最好的方法是在 AndroidGame 活动类中设置插页式广告,并使用一个界面在您的游戏屏幕中显示广告:
首先创建接口类:
public interface MyActivityListener {
public void showInterstitial();
}
Run Code Online (Sandbox Code Playgroud)
然后在你的 AndroidGame 类中,实现接口:
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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,任何时候你想在 any 中展示广告screen,你只需调用该showInterstitial()方法。游戏画面中的示例:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用这个实现来完成所有需要在 UI 线程上运行的工作(隐藏和显示横幅广告、评价/分享应用程序、存储分数等。希望它有帮助:)
| 归档时间: |
|
| 查看次数: |
2214 次 |
| 最近记录: |