全画面オーバーレイを描画するアプリを作成しています。ロックスクリーンのようなもの。ユーザーはタイマーを設定し、時間が来たらこのオーバーレイが表示されます。ナビゲーションバーの裏側または上にオーバーレイを描画
しかし、オーバーレイはシステムナビゲーションバーをカバーしません。ナビゲーションバーが半透明のときは問題です。ユーザーはシステムボタンに触れることができ、それらの背後にある変更可能な背景を見ることができます。したがって、ユーザーはロック画面の背後に何かを見ることができます。それは問題だ。 どうすればこのような状況を防ぐことができますか?
ロック画面オーバーレイはアクティビティではありません。ユーザーはタイマーを設定し、自分のデバイスを自由に閲覧できます。時間が来るとアプリは、次のように、画面上のいくつかのビューを描画します:私は仮定
public OverlayView(Context context) {
super(context);
inflate(context, R.layout.overlay_view, this);
}
static WindowManager.LayoutParams createLayoutParams(int height) {
final WindowManager.LayoutParams params =
new WindowManager.LayoutParams(MATCH_PARENT, height, TYPE_SYSTEM_ERROR,
FLAG_NOT_FOCUSABLE
| FLAG_LAYOUT_IN_SCREEN
| FLAG_LAYOUT_NO_LIMITS
| FLAG_NOT_TOUCH_MODAL
| FLAG_LAYOUT_INSET_DECOR
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
, TRANSLUCENT);
params.gravity = Gravity.TOP;
return params;
}
public int retrieveScreenHeight() {
int result = 0;
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Point outSize = new Point();
wm.getDefaultDisplay().getSize(outSize);
if(outSize.y > outSize.x){
result = outSize.y;
}else{
result = outSize.x;
}
return result;
}
を呼び出して、ロック画面を表示するにはご回答有難うございます。オーバーレイビューはアクティビティではありません。それはちょうど 'ビュー'です。画面の内容に関係なく、いつでも 'windowManager.addView'を使って描画します。その時、画面上には他のアプリがあります。 – user2775914
次に、最も簡単な方法は、そのビューを「ダミーアクティビティ」、フルスクリーン、ビューをバックグラウンドとすることです。 この方法では、(オーバーレイが半透明なので)何が遅れているのかはまだ分かります。フルスクリーンフラグが有効です。 – NSimon
あなたは、このフルスクリーン "ダミーアクティビティ"がポップアップするはずの時間が来ることを意味しますか?そして、私は 'windowManager.addView'を使うべきではありませんか?しかし、私はこのアクティビティをどのようにオーバーレイとして設定できますか?このアクティビティの閉鎖を防ぐにはどうすればよいですか?ユーザーがロックを解除しないうちに閉じられないLockscreenである必要があります。 – user2775914