76

ActivityまたはDialogをロック画面に表示するにはどうすればよいですか?

Activity.onCreate()メソッド でさまざまなウィンドウタイプを設定して、画面がオンになったときにロックアクティビティを表示しようとしました。

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

と他の人と一緒にSYSTEM_ALERT_WINDOWINTERNAL_SYSTEM_WINDOW許可。

デバイスのロックを解除すると、アクティビティが表示されます。

アップデート:

私は実際、デフォルトのロック画面の代わりに自分のアクティビティを表示することができました。HOMEボタンを使わない限り完璧に動作します。

4

4 に答える 4

124
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...

于 2011-04-20T07:47:59.330 に答える
33

セキュリティ上の理由から、android はアクティビティの背後にロック画面を表示しないため、アクティビティには行かないでください。Activity の代わりに service を使用してください。

以下は、私のサービスの 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" />そしてマニフェストに追加

于 2014-12-31T08:32:34.433 に答える
0

ここでの回答のいずれかで、機能していると思われるコードを使用できます。次に、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);
于 2016-01-15T07:10:24.903 に答える