Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 全系统唤醒锁定和释放取决于电源连接_Android_Android Wake Lock - Fatal编程技术网

Android 全系统唤醒锁定和释放取决于电源连接

Android 全系统唤醒锁定和释放取决于电源连接,android,android-wake-lock,Android,Android Wake Lock,我正在尝试开发一个简单的android应用程序,当设备插入时,即通过dock,屏幕会获得唤醒锁,这样屏幕就不会关闭,无论他们的应用程序是什么,当拔下插头时,唤醒锁就会释放 目前我没有任何服务运行,因为我认为它是不需要的。它接收连接电源和断开电源的广播意图。当电源连接时,它似乎成功地获取了唤醒锁,但当电源断开时,它试图释放唤醒锁,但却引发了空指针异常。我猜这是因为应用程序不一定在运行,也没有服务,所以变量不会被保留 下面是我正在使用的接收广播的代码 public class BroadcastRe

我正在尝试开发一个简单的android应用程序,当设备插入时,即通过dock,屏幕会获得唤醒锁,这样屏幕就不会关闭,无论他们的应用程序是什么,当拔下插头时,唤醒锁就会释放

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

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

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();
    }
}
有没有一种方法可以做到这一点?我想,在获得唤醒锁时,需要有一个正在运行的服务,一旦电源断开,释放并停止服务

谢谢你能提供的帮助

根据文档,应用程序被终止时,
onReceive()
似乎不会被调用,这是有道理的。如果Android只是为了调用
onReceive()
而关闭了你的应用程序,它就不会启动你的应用程序。如果要继续接收/响应这些事件,则需要使用服务