唤醒Google Glass'屏幕显示基于位置的当前信息

时间:2014-10-21 19:57:06

标签: android google-glass google-mirror-api gdk

我正在构建一个用于驾驶的沉浸式应用,它不应在屏幕上显示任何内容并在后台运行,直到驱动程序到达某个特定的位置标记。一旦在该位置处或附近,基于GPS位置,屏幕应该被唤醒,并显示与该位置相关的内容。这似乎很简单,但我没有找到任何解决方案,这对我有意义。获取和比较GPS信息不是问题,但是如何根据某些事件或某些内容的更改或您以编程方式定义的内容唤醒屏幕?

这是我应该使用Mirror API来处理,而不是将通知推送到时间线吗?

我使用沉浸式的原因是因为我不希望驱动程序能够执行多任务,就像现场卡允许的那样。相反,他/她应该启动应用程序,它将接管其余部分(将通知推送到显示器)。这几个通知可以在几秒钟之后消失,或者每当Glass感觉回到睡眠状态时都会消失。"

非常感谢有关此事的任何想法。我已经阅读了关于唤醒锁的内容,但我不确定这是否属于我正在做的事情。提前谢谢。

2 个答案:

答案 0 :(得分:2)

只是想知道,您是否考虑过将屏幕调暗到最低限度?如果你真的不想看到任何东西,也许把颜色变成黑色?

以下是问题 - 根据谷歌眼镜TOS,你不能在应用程序运行时关闭屏幕,所以即使你找到了一些hacky方式,你也不应该这样做。我的应用也遇到了这个问题。

我的解决方案(我的问题是电池吃得快得令人难以置信)就是使用这段代码:

使屏幕变暗(即使它显示0f,它仍然有点亮)

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0f;
getWindow().setAttributes(lp);

恢复全亮度:

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1f;
getWindow().setAttributes(lp);

然后,如果你想要隐藏屏幕上的内容,你可以在布局中的所有内容上添加一个黑框,并将其设置为android:visibility =“gone”,直到你想调暗屏幕,然后设置框的一旦您希望屏幕再次打开并使您变亮,可见性就会变为可见并返回。

如果您想要在打开应用程序之前使用此人拥有的亮度而不是将屏幕亮度设置为最大值,您可以在onCreate中使用此代码来获取原始亮度,以便您知道要设置的内容它到后来:

int previousScreenBrightness = android.provider.Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);

此外,将此标记设置在顶部,以便应用程序不会随着时间的推移自行调暗/关闭:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

我希望这会有所帮助。祝你好运!

答案 1 :(得分:0)

当驱动程序到达某个特定位置标记时,您可以在服务或活动中触发事件,然后使用PowerManager唤醒Glass。

import android.content.Context;
import android.os.PowerManager;

public void DoSomething()
{
    // If glass is sleeping then wake up
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK, "Wake Lock");

    if (powerManager.isScreenOn() == false) {
        wakeLock.acquire();
    }

    // Reveal the card in the "present" timeline
    // newCard.publish(LiveCard.PublishMode.REVEAL);
    // Or, StartActivity(myIntent);

    // *** IMPORTANT: RELEASE THE WakeLock
    if (wakeLock.isHeld()) {
        wakeLock.release();
    }
}

您还需要清单中的WAKE_LOCK权限。

<uses-permission android:name="android.permission.WAKE_LOCK" />

希望有所帮助。