2012-03-11 16 views
11

Honeycombでは、TYPE_SYSTEM_OVERLAYでシステムオーバーレイを作成し、FLAG_WATCH_OUTSIDE_TOUCHでタッチを受け取ることができました。ICSのTYPE_SYSTEM_OVERLAY

今、ICSが変更されました。私はまだシステムのオーバーレイを作成することができますが、私は触れることができません。

今、私はTYPE_SYSTEM_ALERTで同じものを作成して触れることができますが、それは単にtoucheventを捕まえるだけで、ハニカムのようにそれらを渡すことはありません。

アイデアはありますか?

種類について

答えて

7

あなたが書いていることはすべて真です。おそらく以前の動作がタップジャック攻撃の原因であったため、セキュリティを強化することが考えられます。この変更について最近私はa blog postを書きました。

アイデアはありますか?

いずれかを使用しないでください。 LayoutParams を設定するとTYPE_SYSTEM_OVERLAYにタイプを設定しないオーバーレイビューを作成するには

+0

まだICSのSwipepadでアプリを見つけました。 これは、あらかじめ定義されたポイントから画面の中央までドラッグすることができ、オーバーレイを開始するので、方法が必要です。 –

+0

@EdwinSchriek:その動作は、TYPE_SYSTEM_ALERTと一貫して聞こえます。システムアラートのタップを介して開始された連続的なタッチイベントは、そのシステムアラートに配信され、基礎となるアプリではないことになります。 – CommonsWare

+0

ええと、私はそれが可能ではないと思うが、私は探し続けるだろう。ありがとう! –

23

、。

代わりにTYPE_PHONEに設定してください。

は、以下のフラグを使用します。

FLAG_NOT_TOUCH_MODAL

FLAG_WATCH_OUTSIDE_TOUCH

FLAG_NOT_TOUCH_MODAL < <私はこの1つは非常に重要であることが判明しました。それがなければ、オーバーレイに焦点が当てられ、ソフトキー(ホーム、メニューなど)のプレスは下のアクティビティに渡されません。

+4

FYI jawswareには、ICSで動作する完全なサンプルアプリケーションがここにあります。http://www.jawsware.mobi/code_OverlayView/ –

+3

4.2.X上の任意のveiwのクリックイベントを捕捉することはできませんが、 Androidのバージョン。助言がありますか? –

+0

ありがとうございます。それは私のために働いた - 私は 'TYPE_SYSTEM_OVERLAY'を持っていて、 'FLAG_NOT_TOUCH_MODAL'で 'TYPE_PHONE'に変更し、 'setOnTouchListener'ではなく 'setOnTouchListener'でリスナーを設定して、アクティビティだけでなくアクティビティの上にあるPopUpウィンドウ以下。私の場合、それはオーバレイウィンドウを持つデフォルトのシステム着信通知でした。 –