在睡眠模式下从服务中唤醒Android Wear?

时间:2014-11-24 20:10:58

标签: android xamarin xamarin.android wear-os android-wear-notification

我正在使用Android Wear应用程序,该应用程序以某种方式显示时间过后显示通知然后重新开始的计时器。通知会在手表上显示一条消息并使设备振动。

该应用程序正常工作,除非手表处于睡眠模式。在这种情况下,用户需要触摸屏幕才能使手表振动并且计时器再次启动。

从WearableListenerService创建并显示通知。我尝试了许多解决方案,如唤醒锁。代码是用C#用Xamarin.Android编写的,但我认为任何java dev都能读取:

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的其他解决方案,但我仍然有相同的行为。

2 个答案:

答案 0 :(得分: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); }

答案 1 :(得分:-1)

我会避免使用Xamarin,因为它可能会导致一些冲突并且不能正常工作,因为它没有被设计为。

此外,如果你创建了在Android Wear上触发的服务 - 我会说Message API是正确的方法,你应该没有问题创建通知(在手表本身上)有振动(不需要)触摸屏)并更新服务通知 - 更新计时器值。

不需要唤醒锁。

可能会有所帮助:How can I create notification that is different on device and wear?