0

A と B の 2 つのアクティビティがあります。A は常に B と B がダイアログ テーマを使用する前に開始します (これは必須かつ重要です)。どちらも NFC フォアグラウンド ディスパッチ メカニズムを使用しており、これは非常にうまく機能します。ただし、方向が変わると問題が発生します。必要に応じて、onResume メソッドと onPause メソッドでフォアグラウンド ディスパッチを有効または無効にします。

何が起こるのですか:

  • A が起動し、A onResume が呼び出されます
  • A onPause、B launches、B onResume が呼び出されます (すべてが期待どおりに動作します)。
  • 方向転換
  • B onPause が呼び出され、B が再度起動され、B onResume が呼び出され、A がバックグラウンドで再度起動され、A onResume が呼び出され、A onPause が呼び出されます

--> これで、B のフォアグラウンド ディスパッチが機能しなくなりました。

すべてが通常のテーマでうまく機能するため、B のダイアログ テーマがこの問題を引き起こしています。回避策はありますか?

解決:

コメントありがとうございますが、役立つ回避策を見つけました。アクティビティ BI の onCreate メソッドで、次の操作を行います。

    /*
     * This workaround is needed as this activity uses the dialog theme. When the background activity uses the foreground
     * dispatch as well, then it breaks this activity's foreground dispatch on an orientation change. 
     */
    mCancelButton.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            NfcForegroundDispatch.setupForegroundDispatch(NfcDetectorActivity.this);
        }
    });

私が言ったように、それは解決策ではなく回避策です。

4

0 に答える 0