1

我正在开发 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 秒后自动释放。然后,我还尝试了其他解决方案,WakefulBroadcastReceiverAlarmManager我仍然有相同的行为。

4

2 回答 2

0

我已经在移动设备上完成了类似的操作,只需在我通过服务调用的活动的 onCreate 中添加一行。

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //add this below getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); }

于 2015-04-04T11:49:30.057 回答
-1

我会避免使用 Xamarin for Wear,因为它可能会导致一些冲突并且无法正常工作,因为它并非设计用于。

此外,如果您创建了在 Android Wear 上触发的服务 - 我会说Message API这是正确的方法,您应该可以通过振动(无需触摸屏)创建通知(在手表本身上)和更新通知您的服务 - 更新计时器值。

不需要唤醒锁。

可能有帮助:如何创建在设备和穿戴设备上不同的通知?

于 2014-11-25T00:22:38.133 回答