ロック画面に表示されるActivity
またはDialog
を表示するにはどうすればよいですか?
Activity.onCreate()
メソッドでさまざまなウィンドウタイプを設定して、画面がオンになったときにロックアクティビティを表示しようとしました。
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
SYSTEM_ALERT_WINDOW
およびINTERNAL_SYSTEM_WINDOW
権限を持つその他。
デバイスのロックを解除すると、アクティビティが表示されます。
更新:
実際、デフォルトのロック画面の代わりに自分のアクティビティを表示することができました。 HOMEボタンを使用しない限り、完全に機能します。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
このフラグを使用して、アクティビティの開始時にロック画面を無効にしてみてください。
APIレベル17以降は、使用できます
<activity
Android:name=".yourActivityName"
Android:showOnLockScreen="true"
Android:screenOrientation="sensorPortrait" >
例のようなshowOnLockScreen ...
Androidはセキュリティ上の理由でアクティビティの背後にロック画面を表示しないため、アクティビティの代わりにサービスを使用してください。
以下は、私のサービスのonStartCommandのコードです。
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
そして、<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
をマニフェストに追加します
OnCreateメソッドでこれを使用します
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// This line should be before setContentView..
setContentView(......);
これがうまくいくことを願って
ここで答えているコードは、動作していると思うものを使用できます。次に、[〜#〜] home [〜#〜]ボタンが機能しないようにするには、TYPE_SYSTEM_ALERT
または TYPE_SYSTEM_OVERLAY
(現在使用しているものに依存)からTYPE_SYSTEM_ERROR
:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);