6

WakeLock の取得に問題があります。うまくいかないようです。FULL_WAKE_LOCK を取得しようとしていますが、ディスプレイが有効になっておらず、アプリでタスクを実行することもできません。

次の権限を使用しています: android.permission.WAKE_LOCK

私の取得コードは次のようになります。

PowerManager pm = (PowerManager) getBaseContext().getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag");
wl.acquire();

私は何を間違っていますか?

編集:別のフラグ ACQUIRE_CAUSES_WAKEUP を追加しました...しかし、動作の変更はありません

Edit2: 私がやろうとしているのは、音楽を再生し、特定のイベントでデバイスを起動することだけです。音楽は完璧に機能していますが、デバイスは黒いままです。

4

3 に答える 3

7

WakeLock は、画面をオンにしておく非効率的な方法です。代わりに、WindowManager を使用して魔法を実行します。次の 1 行で WakeLock は十分です。これが機能するには、WakeLock パーミッションも必要です。また、このコードは wakeLock よりも効率的です。

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

WakeLock を手動で解放する必要はありません。このコードにより、Android システムがロックを自動的に処理できるようになります。アプリケーションがフォアグラウンドにある場合、WakeLock が保持され、それ以外の場合は Android システムがロックを自動的に解放します。

ただし、フラグを解放したい場合は、次の方法で実行できます。

getWindow().clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
于 2011-04-05T07:26:25.393 に答える
3
private static PowerManager.WakeLock lockStatic = null;
private static String LOCK_NAME_STATIC = "MyWakeLock";

public static void acquireStaticLock(Context context) {
    getLock(context).acquire();
}

synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic == null) {
        PowerManager mgr = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);
        lockStatic = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK,
                LOCK_NAME_STATIC);
        lockStatic.setReferenceCounted(true);
    }

    return (lockStatic);
}

使用法:

acquireStaticLock()ロックを取得する必要があるときに呼び出す

getLock(this).release();ロックを解除する必要がある場合は、内部アクティビティを呼び出し ます

また、ミニフェスト ファイルにアクセス許可を追加します。

<uses-permission android:name="android.permission.WAKE_LOCK" />
于 2011-09-27T09:15:07.040 に答える
1

どこでウェイクロックを取得していますか?インテントが開始するサービス/アクティビティではなく、インテントの受信者で取得する必要があります。

于 2010-09-01T10:58:42.563 に答える