将wakelock以不同的活动释放到获得的地方

时间:2012-06-30 12:48:43

标签: android release wakelock

我的应用中有两个活动。第一个活动获得了即使在此活动被破坏时仍然存在的唤醒锁。此活动还会设置启动第二个活动的警报。我希望第二个活动释放第一个活动获得的唤醒锁。

如此低调:

第一项活动获得wakelock>>第一个活动被销毁>> Wakelock仍然获得>> canender(闹钟)打开一个新活动(第二活动)>>第二个活动发布了wakelock ??

问题是如何在不同的活动中释放唤醒锁,以获取获取唤醒锁的位置?

这是我在第一项活动中用来获取唤醒锁的代码:

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

我可以使用任何代码在第二个激活中释放唤醒锁吗?

2 个答案:

答案 0 :(得分: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
完成此活动时

//离开

在你的第二项活动中:

if (Globals.wakelock != null) {
    Globals.wakelock.release();
    Globals.wakelock = null; // We don't have a wake lock any more
}

答案 1 :(得分: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;
            }
        }
    }
}

查看上面的代码..将其输出到一个单独的类文件中,并在清单中为一些自定义意图定义它....现在这个类将响应自定义意图...只是广播那个意图和你可以在你的整个应用程序中打开或关闭唤醒锁,因为唤醒锁是静态的。就像这样:

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

以上将在服务中定义。
那么我们可以从任何地方调用这个方法,因为它的静态改变了cpu wakelock