1

我今天切换到 AdMob。我的问题:加载插页式广告的时间非常长(最多 10 秒)。

我的应用程序:我有一个结果活动,用户停留大约 10 秒。在此 Activty 上是一个完成按钮,您可以使用它返回 MainActivty(在我的情况下为“主页”),其中是另一个关闭应用程序的完成按钮。

我的问题:是否可以在用户处于 Result Activity 时加载 Interstitial 并在他点击完成按钮时立即弹出?

我的代码自动取款机:

OnCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);


    this.interstitialAds = new InterstitialAd(this, "xxxMyCodeIDxxx");
    this.interstitialAds.setAdListener(this);}

和点击:

@Override
        public void onClick(View v) {

            Result.this.finish();
            startActivity(new Intent(Result.this, Home.class));
            AdRequest adr = new AdRequest();
                    adr.addTestDevice("xxxMyCodexxx");
                    interstitialAds.loadAd(adr);}

和(不重要的)结束:

 @Override
public void onDismissScreen(Ad arg0) {
}

@Override
public void onFailedToReceiveAd(Ad ad, ErrorCode error) {
    Toast.makeText(Result.this, "No ad found!", Toast.LENGTH_LONG)
    .show();
}

@Override
public void onLeaveApplication(Ad arg0) {
    // TODO Auto-generated method stub
}

@Override
public void onPresentScreen(Ad arg0) {
}

@Override
public void onReceiveAd(Ad arg0) {
    if (interstitialAds.isReady()) {
        interstitialAds.show();
    } else {
        Toast.makeText(Result.this, "Interstitial ad was not ready to be shown.", Toast.LENGTH_LONG)
        .show();
    }
}

如果我像这样使用它,当我单击完成按钮时,Interstitial 会加载并弹出,但这最多需要 10 秒。在这段时间里,每个人都点击了 MainActivity 中的第二个退出按钮离开了应用程序。

谢谢!

4

1 回答 1

1

您应该提前加载广告,然后在他们完成结果活动时显示它。

我建议在 Home#onCreate 期间加载广告,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);


    this.interstitialAds = new InterstitialAd(this, "xxxMyCodeIDxxx");
    this.interstitialAds.setAdListener(this);

    final AdRequest adr = new AdRequest();
    adr.addTestDevice("xxxMyCodexxx");
    interstitialAds.loadAd(adr);
}

并且当单击按钮时启动 ResultActivity 以便在它完成时通知您,并在完成时显示广告(如果可用)。

private static final int MY_REQUEST_CODE = 1;

@Override
public void onClick(View v) {
    // Result.this.finish(); // I don't know why you are calling this - it looks wrong.
    startActivityForResult(new Intent(Result.this, Home.class), MY_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode = MY_REQUEST_CODE) {
        if (interstitialAds.isReady()) {
            interstitialAds.show();
        } else {
            Toast.makeText(Result.this, "Interstitial ad was not ready to be shown.", Toast.LENGTH_LONG).show();
        }
    }
}

在 ResultActivity 中,您需要在某个时候调用 #setResult(someValue)。我会在 onCreate 期间执行此操作。

您可能面临的唯一问题是,如果 Home Activity 在显示 ResultActivity 时被垃圾收集,在这种情况下,InterstitialAd 也将丢失并需要重新加载,但这在大多数设备上不太可能并且您对自己设置了限制我没有看到其他选择。

于 2013-10-12T07:53:28.400 回答