Android 唤醒谷歌玻璃&x27;根据位置显示当前信息的屏幕

Android 唤醒谷歌玻璃&x27;根据位置显示当前信息的屏幕,android,google-glass,google-mirror-api,gdk,Android,Google Glass,Google Mirror Api,Gdk,我正在构建一个沉浸式驾驶应用程序,在驾驶员到达某个特定位置标记之前,该应用程序不应在屏幕上显示任何内容并在后台运行。一旦到达或接近该位置,基于GPS位置,屏幕应会唤醒,并显示与该位置相关的内容。这似乎很简单,但我还没有找到任何对我有意义的解决办法。获取和比较GPS信息不是一个问题,但是如何根据某个事件、某个更改或编程定义的内容唤醒屏幕 我应该用镜像API来处理这件事,而不是将通知推送到时间线上吗 我之所以使用沉浸式是因为我不希望驱动程序能够像实时卡那样多任务处理。相反,他/她应该启动应用程序,它

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

我应该用镜像API来处理这件事,而不是将通知推送到时间线上吗

我之所以使用沉浸式是因为我不希望驱动程序能够像实时卡那样多任务处理。相反,他/她应该启动应用程序,它将接管其余部分(将通知推送到显示器上)。这些通知可以在几秒钟后或当Glass想回到“睡眠”状态时自动消失


对此问题的任何意见都将不胜感激。我读过关于唤醒锁的东西,但不确定这是否与我正在做的事情有关。提前谢谢。

只是想知道,你有没有想过把屏幕调暗到绝对最小?如果你真的不想看到任何东西,也许可以把颜色改成黑色

这是一个问题——根据谷歌Glass TOS的说法,当应用程序运行时,你实际上无法关闭屏幕,所以即使你找到了一些黑客的方法,你也不应该这样做。我的应用程序也有这个问题

我的解决方案(我的问题是电池被难以置信地快速消耗)是使用以下代码:

使屏幕变暗(尽管显示为0f,但仍有一点亮)

要返回到全亮度,请执行以下操作:

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1f;
getWindow().setAttributes(lp);
然后,如果您想隐藏屏幕上的内容,您可以在布局中的所有内容上添加一个黑框,并将其设置为android:visibility=“gone”,直到您想使屏幕变暗,然后将框的可见性设置为visible,并在希望再次打开屏幕并使其变亮后再将其设置为gone

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

int previousScreenBrightness = android.provider.Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
此外,在顶部设置此标志,以便应用程序不会随着时间的推移自行变暗/关闭:

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

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

当驱动程序到达某个特定位置标记时,您可以在服务或活动中触发事件,然后使用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();
    }
}
您还需要清单中的唤醒锁定权限

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


希望这能有所帮助。

多亏了刚才投票认为这很有用的人。这是有道理的。但是当你写“根据谷歌眼镜TOS,你实际上不能在应用程序运行时关闭屏幕”时,你的意思是你不能“打开”屏幕吗?这是我最大的问题:我找不到方法告诉应用程序打开屏幕。在正常操作下,玻璃将变暗,约10秒后关闭屏幕。这是可以的,但我希望我的程序重新打开屏幕,并在适当的时候显示一些内容。它认为我理解你的逻辑是解决这个问题的一个办法;只需始终保持屏幕,但根据需要进行遮盖/揭开。是这样吗?我的意思是,在应用程序仍在后台运行并收听/拍摄视频/跟踪的情况下,不允许您关闭屏幕。您需要运行代码才能再次打开屏幕。让我重新表述一下——为了让您能够通过代码执行任何操作,您需要运行代码。如果在屏幕关闭时不允许在后台运行代码,那么实际上就不能发出任何类型的编程代码来重新打开屏幕。这有意义吗?我不确定“屏幕关闭时不允许在bg中运行代码”是否完全正确。例如,如果我在清单中使用android:immersive=“true”,代码仍然会运行,即使屏幕处于休眠状态——至少我认为是这样。此外,当屏幕休眠时,livecard也将保持运行。(比如秒表)啊,很酷的发现。谢谢我要调查一下,看看能不能找到一个办法。如果是这样的话,那么是的,我很确定我已经看到了一些睡眠和唤醒屏幕的方法,但是是的,正如你所说,只有使用实时卡。
<uses-permission android:name="android.permission.WAKE_LOCK" />