我正在构建一个应用程序来控制 LED 灯泡(Mi-Light、limitlessLed 等)。该应用程序的目的是具有用户可以选择并让其无限期运行的效果。例如,“烛光”效果可能会或多或少随机地在黄色和红色之间改变灯泡颜色,直到用户决定停止。
快速背景信息:这些灯泡的控制方式是通过 WiFi 网络发送的 UDP 包。因此,即使设备处于睡眠状态,我也需要该应用程序继续发送此类 UDP 数据包。
经过一番研究,我最终使用了唤醒锁,以便让设备即使在睡眠时也能通过 WiFi 网络广播 UDP 包(请告诉我,以防有更好的方法我没有发现)。
一切正常运行几分钟(也许 10 分钟?),直到设备似乎进入某种深度睡眠模式并停止通过网络发送包。
我怎样才能防止这种情况发生?更一般地说,为了完成上述内容,我应该采取什么好的方法?
仅供参考,这是一个示例代码片段,它只是在 7 种颜色的数组中旋转:
[...]
private static boolean animationRunning = false;
private Timer timer = new Timer();
private PowerManager mgr = (PowerManager)getReactApplicationContext().getSystemService(Context.POWER_SERVICE);
private PowerManager.WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
[...]
public void startAnimation(final int step) {
animationRunning = true;
wakeLock.acquire();
final int[] steps = { 0, 66, 99, 122, 166, 199, 255 };
resetTimer();
timer.scheduleAtFixedRate(new TimerTask(){
int curstep = 0;
@Override
public void run(){
byte[] Bytes = {64, (byte)steps[curstep], 85};
try {sendUdp(Bytes);} catch(IOException e) {};
curstep = curstep + 1;
if(curstep == steps.length) {
curstep = 1;
}
}
},0,1000);
}