4

アプリケーションに Admob を実装しようとすると、非常に厄介なバグが発生します。問題は自分のコードにあると思っていましたが、調査の結果、Android-Banner-Essentials の例 (ここからダウンロードできます) にも存在することがわかりました。誰かがこの問題に遭遇したことがあるか、または対処方法を知っているのではないかと思います。

基本的に、アプリケーションのステータス バーとタイトル バーの両方が無効になっている場合は、フル スクリーンを使用する必要があります。Banner Essentials の例では、使用可能な領域の最上部に Admob バナーのみが表示されます。サンプルをダウンロードしましたが、変更したのは次の 2 つだけです。

  • 適切にコンパイルして広告を受け取るために、発行元 ID を追加しました ;)
  • アクティビティのマニフェストに 1 つのパラメータを追加して、タイトルとステータス バーを無効にしました: android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

コンパイルされたバイナリは、起動されたデバイス (Nexus One、G1、Desire、さまざまな Android バージョンを試した) に関係なく、同じ問題の影響を受けます。

  • 広告バナーが表示されたらホームを押し、
  • ホーム画面に戻ったら、ホームを長押しして、最近起動したアプリを表示します。
  • 戻る Banner Essentials アプリを選択します。

私のテストでは、50% の再現率で Admob バナーが元の位置 (画面の一番上) に戻らないことがわかりました。私が意味することをよりよく示すために、3 つのスクリーンショットを用意しました。

http://img841.imageshack.us/g/correctz.png/

重要なお知らせ:

  • アプリが正常に再開されると、バナーがステータスバーのすぐ下に表示され、画面上部の境界に揃えられるまで上にスライドし、
  • エラーが出てバナーが全く動かない、
  • 他の割り込み (戻る、電源ボタンを押す) では問題を再現できませんでした。
  • 何らかの形でフォーカスの獲得/喪失に関連していると思います (スクリーンショットを参照)。

私のアプリは Banner Essentials よりも少し複雑なので、コードで問題を検索することから始めましたが、運が悪かったため、状況をできるだけ単純化しようとしました。

問題の原因を知っている人はいますか? この動作を処理するには、追加のフラグまたはプロパティを設定する必要があるのではないでしょうか?

4

2 に答える 2

4

これは Android のバグとして参照されます。解決策はなく、回避策のみです。onResume の約 1 秒後に Window Fullscreen を再設定する必要があります (ステータス バーが派手なスライド アウト アニメーションを終了するまで待つため...)。これにより、レイアウト全体が再計算され、問題が「解決」されます (正しい位置への素早いジャンプ)。

public void onResume()
{

  ...

    handler.postDelayed(new Runnable() {
        public void run() {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
    }, 1500); 

  ...

}

良くない。しかし、それはまだ入手可能な最高のものです。詳細はこちら

于 2011-09-20T13:47:07.657 に答える
0

私の場合、この動作はロック画面からの再開によってトリガーされました。理由はわかりませんが、空のオーバーロードされた関数を追加した後、修正されました (ただし、HTC Wilfire でのみテストしました)。それは別のバグかもしれません。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    /* Workaround a probable Android bug with fullscreen activities:
     * on resume status bar hides and black margin stays, 
     * reproducible half of the time when coming back from lock screen 
     * (tested on HTC Wildfire)
     * No idea why but this empty overload method fixed it.
     */
}
于 2011-12-20T23:54:41.973 に答える