2

アプリには2つのアクティビティがあります。最初のアクティビティは、このアクティビティが破棄されてもまだ存在しているウェイクロックを取得します。このアクティビティは、2番目のアクティビティを開始するときにアラームを設定します。2番目のアクティビティで、最初のアクティビティで取得したウェイクロックを解放したいと思います。

だから基本的に:

最初のアクティビティがwakelockを取得します>>最初のアクティビティが破棄されます>>Wakelockがまだ取得されています>>canender(アラーム)が新しいアクティビティを開きます(2番目のアクティビティ)>>2番目のアクティビティがwakelockを解放しますか??

問題は、ウェイクロックが取得された場所とは異なるアクティビティでウェイクロックを解放するにはどうすればよいですか?

これは、最初のアクティビティでwakelockを取得するために使用しているコードです。

    WakeLock wl;
    PowerManager pM = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wl = pM.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wakeLock");
   wl.acquire();

2番目のアクティビティでウェイクロックを解放するために使用できるコードはありますか?

4

2 に答える 2

11

ウェイクロックを静的変数に格納して、両方のアクティビティがアクセスできるようにします。このような:

class Globals {
    public static WakeLock wakelock;
}

あなたの最初の活動で:

PowerManager pM = (PowerManager)getSystemService(Context.POWER_SERVICE);
WakeLock wl = pM.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wakeLock");
wl.acquire();
Globals.wakelock = wl; // Save in a place where it won't go

  //このアクティビティが完了すると離れます

2番目のアクティビティ:

if (Globals.wakelock != null) {
    Globals.wakelock.release();
    Globals.wakelock = null; // We don't have a wake lock any more
}
于 2012-06-30T14:55:54.887 に答える
1
public class WakeLockManager extends BroadcastReceiver {

    private static WakeLock mWakeLock;
    private String LCLT;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Consts.WAKELOCK_INTENT)) {
            Log.v("wakelock", "GOT THE wakelock INTENT");
            boolean on = intent.getExtras().getBoolean("on");
            if (mWakeLock == null) {
                PowerManager pm = (PowerManager) context
                        .getSystemService(Context.POWER_SERVICE);
                mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                        "Breeze WakeLock");
            }
            if (on) {
                if (!mWakeLock.isHeld()) {
                    mWakeLock.acquire();
                    Log.v("wakelock", "acquiring wakelock");
                }
            } else {
                if (mWakeLock.isHeld()) {
                    Log.v("wakelock", "releasing wakelock");
                    mWakeLock.release();
                }
                mWakeLock = null;
            }
        }
    }
}

上記のコードを見てください..別のクラスファイルに入れて、マニフェストでカスタムインテント用に定義してください....これで、このクラスはカスタムインテントに応答します...そのインテントをブロードキャストするだけで、 wakelockは静的であるため、アプリ全体でwakelockをオンまたはオフにします。

public static void setWakeup(boolean status) {
    Intent wakelock_Intent = new Intent(CUSTOM_INTENT);
    wakelock_Intent.putExtra("on", status);
    getActivityReference().sendBroadcast(wakelock_Intent);
}

上記はサービスで定義されます..
その後、静的であるため、どこからでもこのメソッドを呼び出してCPUウェイクロックを変更できます

于 2012-08-10T13:11:07.297 に答える