11

私はアラームアプリケーションを開発しています。主なアクティビティから、ブロードキャストを使用してアラームを設定しました。次に、ブロードキャストレシーバーの onReceive で、ユーザーがアラームをシャットダウンまたはスヌーズできるようにするアクティビティを呼び出します...そのアクティビティでは、onCreate の開始時に、次の行を使用して画面をオンにし、デバイスのロックを解除します。

final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                  | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                  | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

これは、Android 2.3.4 を搭載した Samsung Galaxy S2 では完全に機能しますが、Android 2.3.5 を搭載した htc では機能しません。htcでは何もしません。ロックボタンを押すと、円をドラッグしなくても画面が自動的にロック解除されます。そのように、flag_dissmis_keygard は機能していますが、flag_turn_screen_on は機能していません。これを行うための別の方法または別の解決策はありますか?

4

3 に答える 3

15

私はあなたと同じように始めましたが、ウィンドウフラグは実際には機能しませんでした.

私は最終的に2つのAndroidサービスを使用して動作するようになりました:KEYGUARD_SERVICEPOWER_SERVICE:

KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock");
kl.disableKeyguard();

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
        | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();

作業が終わったら、wake lock を解除することを忘れないでください。

DISABLE_KEYGUARDアクセス許可をリクエストする必要があります。WAKE_LOCK

于 2012-07-29T09:25:58.817 に答える
2

ここに解決策があります

WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT,
            LayoutParams.TYPE_SYSTEM_ALERT |
                    LayoutParams.TYPE_SYSTEM_OVERLAY,
                    LayoutParams.FLAG_NOT_TOUCH_MODAL |
                    LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    LayoutParams.FLAG_KEEP_SCREEN_ON|
                    LayoutParams.FLAG_DISMISS_KEYGUARD|
                    LayoutParams.FLAG_TURN_SCREEN_ON,
            PixelFormat.TRANSPARENT);

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    km.isKeyguardLocked();

    windowManager.addView(mTopView, params);
    getWindow().setBackgroundDrawable();
于 2016-03-08T13:55:45.700 に答える