我正在开发 Android Wear 应用程序,它以某种方式是一个计时器,当时间过去后会显示通知,然后重新开始。通知会在手表上显示一条消息并使设备振动。
除了手表处于睡眠模式外,该应用程序运行良好。在这种情况下,用户需要触摸屏幕才能使手表振动并重新启动计时器。
通知是从 WearableListenerService 创建和显示的。我尝试了许多解决方案,例如唤醒锁。代码是用 Xamarin.Android 用 C# 编写的,但我认为任何 java 开发人员也可以阅读:
static PowerManager.WakeLock sWakeLock;
static object LOCK = new object();
void DisplayNotification()
{
//create the wake lock
lock (LOCK)
{
if (sWakeLock == null)
{
// This is called from BroadcastReceiver, there is no init.
var pm = (PowerManager)GetSystemService(Context.PowerService));
sWakeLock = pm.NewWakeLock(
WakeLockFlags.ScreenBright | WakeLockFlags.Full | WakeLockFlags.AcquireCausesWakeup, "My WakeLock Tag");
}
}
sWakeLock.Acquire();
//display the notification
//....
//release the wake lock
lock (LOCK)
{
//Sanity check for null as this is a public method
if (sWakeLock != null)
sWakeLock.Release();
}
}
我的问题是手表会在某个时候(几分钟后)唤醒,但不会在请求时立即唤醒。我试图延迟唤醒锁的释放或做一个 sWakeLock.Acquire(2000)
,以便唤醒锁在 2 秒后自动释放。然后,我还尝试了其他解决方案,WakefulBroadcastReceiver
但AlarmManager
我仍然有相同的行为。