系统范围唤醒根据电源连接锁定和释放

时间:2012-10-26 20:09:50

标签: android android-wake-lock

我正在尝试使用一个简单的Android应用程序,当设备插入时,即通过扩展坞,屏幕获取唤醒锁定,以便屏幕不会关闭,无论他们在哪个应用程序,以及何时拔掉唤醒锁被释放。

目前我没有任何服务,因为我认为不需要。它接收连接电源和断电的广播意图。当电源连接时,它似乎成功获取唤醒锁,但是当电源断开时,它会尝试释放唤醒锁,但会抛出空指针异常。我猜测它是因为应用程序不一定正在运行而且没有服务因此变量不会被保留。

以下是我正在使用的接收广播的代码。

public class BroadcastReceiveDetection extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        ManageScreenLight manageScreenLight = new ManageScreenLight(context);
        String action = intent.getAction();

        if (action == Intent.ACTION_POWER_CONNECTED)
        {
            manageScreenLight.receivedPowerConnected();
        }
        else if (action == Intent.ACTION_POWER_DISCONNECTED)
        {
            try {
                manageScreenLight.receivedPowerDisconnected();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

以下是获取和释放唤醒锁的代码。

Context context;
    PowerManager.WakeLock wakeLock;
    public ManageScreenLight(Context context)
    {
        this.context = context;
    }

    public void receivedPowerConnected()
    {
        Toast.makeText(context, "Power connected", Toast.LENGTH_LONG).show();

        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "ScreenStay");
        wakeLock.acquire();
    }

        public void receivedPowerDisconnected() throws IOException
{
    try
    {
        Toast.makeText(context, "Power disconnected", Toast.LENGTH_LONG).show();
        wakeLock.release();
    }
    catch (Exception ex)
    {
        Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show();
    }
}

有没有办法可以实现这一点我需要一个在获取唤醒锁时运行的服务,并且一旦断电就会释放并停止服务。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

好吧,根据BroadcastReceiver文档,当你的应用程序被杀时,看起来onReceive()没有被调用,这是有道理的。如果只是为了调用onReceive()而杀了它,Android就不会启动你的应用程序。如果您想继续接收/回复这些事件,则需要使用服务。