有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

本文概述

  • 如何入职
  • 对于无眼镜
  • 订婚规则
  • 设置你的Google Glass
  • 你好, 世界!
  • 一点波兰
  • 语音还是触摸?同时使用!
  • 真正的应用程序-拓扑查找器
  • 教程总结
Google Glass是一种未来技术, 有望改变我们使用设备与世界互动的方式。但是从开发人员的角度来看, 为玻璃进行开发有何特别之处?答案是” 没事!” 实际上, 从经验丰富的Android开发人员的角度来看, Google Glass只是另一款屏幕非常小且功能有限的Android设备!
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
任何拥有Android开发知识的人都可以成为这个由未来派可穿戴技术传播者组成的” 精英” 社区的成员, 这是使Google Glass如此出色的部分原因。当然, 你需要学习一些新知识, 例如” Immersion” 和” Active Card” 之间的区别, 但是如你所见, 学习曲线并不陡峭。
此Google Glass教程的目的是通过创建一个包含所有常用步骤的简单应用程序, 为开发任何Glass应用程序奠定基础。我的目标是为你节省一些研究和反复试验的时间, 并使你能够尽快运行第一个Glass应用程序。
在本教程中, 我们将首先介绍如何设置开发环境以及如何将Google Glass连接到计算机。然后, 我们将创建一个简单的” Hello World” Glass应用程序, 该应用程序将包含自定义语音命令并与Glass的开始菜单集成。一旦开发出第一个应用程序并在Glass上运行, 你将学习Glass应用程序中的导航基础, 语音激活菜单和动态内容创建。
如何入职 Glass仍处于” beta测试” 阶段, 为此Google发明了” Explorer Program” 一词。无论你如何命名, Glass都不像智能手机那样可以在商店中购买。不幸的是, Android开发工具仍然没有可用于在没有实际硬件的情况下开发应用程序的仿真器。
因此, 为了运行和调试应用程序, 你将需要通过资源管理器程序来使用实际的Google Glass。要加入该计划, 请访问注册页面并注册访问权限。批准后, 准备你的信用卡, 然后等待玻璃杯交付。目前, Explorer版本的Glass售价为1, 500美元, 但预计价格会在该设备上市之前大幅下降。
对于无眼镜 由于缺少任何仿真器, 因此必须具有实际的Google Glass硬件才能开发本教程(或任何Glass应用程序)中的应用程序, 但是如果预算超出预算, 不要灰心-无论如何还是值得关注的。在本教程中将显而易见的是, 为Glass进行开发与为任何其他Android平台进行开发几乎相同!
如果你还没有使用过Google Glass, 但仍然像我一样兴奋, 请观看以下两个视频, 因为它们应该为你提供足够的输入, 以了解用户界面的基础。
  • Google Glass简介
  • Google Glass操作方法:入门
这里有更多有用的视频供你进行设置和导航, 以及有关用户界面的更多详细信息。
订婚规则 此Google Glass开发人员的教程进行了以下假设:
  • 我假设你了解Glass的导航和设置基础。如果你从未使用过Glass, 请看一下上面链接的视频。
  • 我假设你了解Android开发的基础知识:项目文件的结构, Android应用程序的配置等。
  • 我将使用Android Studio, 但这些说明应可翻译为几乎所有Android开发环境。 Android Studio仍处于” 测试阶段” , 但Glass也是如此。不要害怕开始使用它-这确实是一个很棒的产品。你可以在此处下载Android Studio。
设置你的Google Glass 好吧, 让我们开始吧!
你需要做的第一件事是在Glass上启用调试模式。你必须在用于开发应用程序的每台Android设备上执行类似的操作, 以便熟悉。要启用调试, 请滑动至” 设置” -> ” 设备信息” , 然后点击以打开设备菜单。选择” 打开调试” , 它将被启用。
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
接下来, 你需要准备好开发环境。当前版本的Google Glass要求你使用API??版本19, 因此请确保已安装。另外, 你需要安装Glass开发套件。如果尚未安装这两个软件包, 请使用你的Android SDK Manager。
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
你好, 世界! 因此, 让我们制作第一块” 玻璃器皿” 。 (是的, Google创造了另一个名词!” Glassware” 是在Google Glass上运行的任何应用程序的名称)。首先, 我们将开发一个古老的” Hello World!” 应用。与大多数主要的Android开发环境一样, Android Studio会自动使用模板填充新应用, 以显示该著名短语。结果, 获得” Hello World!” 启动和运行只是基本应用程序部署中的一种练习。
在Android Studio中, 点击” 新建项目” , 然后填写项目表单。你可以使用与此类似的东西:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
选择外形尺寸和API时, 请确保选择” 玻璃” 和API 19
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
选择” 沉浸式活动” 作为你的启动活动。
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
你还记得我曾经提到过, 你需要了解” 沉浸式” 和” 实时卡” 之间的区别吗? Google的用户界面文章介绍了各种类型的Glass屏幕。快速摘要:
  • 实时卡已添加到Glass时间轴, 并通过高频更新显示有关某物的实时信息。即使用户与不同的卡片进行交互, 它们也始终在后台运行。这使用户可以在不断访问各种实时信息的情况下执行多任务。
  • 浸入是完全可自定义的屏幕, 在时间轴体验之外运行。这些使你可以设计自己的UI并处理用户输入, 但你认为合适。这就是我们将要使用的!
在向导的下一个屏幕中, 保留” 名称” 和” 标题” 的默认值, 然后单击” 完成” 。
在Gradle处理完你的依赖关系并准备好项目之后, 是时候插入Glass插件了。现在这是未来的开发!
假设所有Android ADB驱动程序均已到位, 并且Glass被系统识别, 则应将Glass列入设备列表。
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
如果这是你第一次将设备连接到计算机, 则Glass会要求建立批准/信任。只需轻按玻璃杯即可连接, 你应该已经准备好。
单击” 运行” , 然后将带有” MainActivity” 的” 默认APK” 部署为在” USB” 设备上启动的启动活动。
几秒钟后, 你应该在Glass屏幕上看到以下内容:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
欢呼!你的应用程序正在Glass上运行!你要做的就是在创建应用程序时填写一些默认值!
由于我们没有指定其他不同的名称, 因此Glass会以” 显示演示” 的名称显示你的应用。如果你滑动回到” 开始” 屏幕, 然后点击以打开应用程序菜单, 你将看到如下所示的菜单:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
一点波兰 好的, 你已经在运行它, 但这看起来并不像一个真正的Glass应用程序, 并且你不希望该应用程序由” Show demo” 启动。
在本教程中, 我们将对其进行一些微调以获得真实的感觉。
设定主题
首先, 你不想使用这个丑陋的标题” Hello World Immersion” 活动标题栏占用任何较小的Glass屏幕, 并且你绝对不希望你的屏幕为灰色, 黑色字体。为了解决这个问题, 我们只需要在Android上切换主题, 然后让Glass OS进行处理即可。
打开res / values / styles.xml进行编辑。它应具有以下内容:
< ?xml version="1.0" encoding="utf-8"?> < resources> < style name="AppTheme" parent="android:Theme.Holo.Light"> < /style> < /resources>

只需将android:Theme.Holo.Light更改为android:Theme.DeviceDefault。这应该使用Glass默认主题自动处理应用程序的布局和颜色。
定义菜单外观
好的, 我们在此Glass开发教程中要做的下一步是将应用程序设置为具有适当的名称和良好的语音控制启动。打开你的Android清单(AndroidManifest.xml)并在< application…标记上方添加以下内容:
< uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />

你要使用” 开发” 权限的原因是可以使用自定义语音控件。 Google对已批准的Glass应用程序中允许使用哪些语音命令非常严格, 并且所有新命令都必须得到批准。由于本教程仅用于学习目的, 并且你不会将该应用程序提交给官方的Glassware商店, 因此你不必担心。只需打开开发权限, 你就可以访问” 未列出的语音命令” 。有关此的更多信息, 请阅读此GDK页面。
打开voice_trigger.xml进行编辑。这是定义启动应用程序的语音命令的位置。它应该位于res / xml /文件夹中。你应该获得类似于以下内容:
< trigger command="SHOW_ME_A_DEMO" />

不用说” 给我演示” 来启动我们的应用程序, 而只是说出应用程序的名称。将该文件的内容更改为:
< trigger keyword="@string/app_name" />

如果返回清单文件, 你可能会注意到android:label =” @ string / app_name” 已自动更新为也使用资源字符串@ string / app_name而不是以前的硬编码Hello Glass值。如果此设置未更新, 请确保将值设置为android:label =” @ string / app_name” 。
你的应用名称是什么?如果打开res / values / strings.xml, 则你的app_name应列为:
< string name="app_name"> Hello Glass< /string>

这应该为你的第一个Hello Glass应用程序做好准备。让我们看看它现在如何工作!
在” 开始” 屏幕中, 你可以说” 确定杯” 以调出语音菜单。你的应用程序现在位于语音激活命令列表中。
通过本指南来指导你, 这就是Glass应用程序开始屏幕的外观。
如果你说” Hello glass” , 则应启动你的应用程序, 并且应该获得标准化的Glass体验:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
如果你不想使用语音来激活应用程序, 则只需点击” 开始” 屏幕, 你就会在菜单中看到你的应用程序可用:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
语音还是触摸?同时使用! 密切注意应用程序的界面以及用户与应用程序的交互非常重要。请记住, 你的用户并不总是能够使用自己的声音-例如, 在观看演讲或演示时。或者, 他们可能会举手, 无法触摸。我建议你在可能的情况下同时提供触摸和语音菜单交互, 以允许你的用户使用语音和触摸板并行浏览你的应用程序。
真正的应用程序-拓扑查找器
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
既然你对Glass的开发很满意, 并且已经创建了Hello Glass, 现在该创建一个真正的应用程序, 该应用程序将使用Glass的新功能。让我们构建一个应用程序, 使你可以基于开发平台浏览srcmini顶级开发人员的个人资料。
我们的示例Glass应用程序的结构将很简单:
  1. 我们希望我们的开始屏幕具有带语音的srcmini徽标, 然后点击激活的菜单, 使我们能够选择需要开发人员的开发平台。
  2. 选择平台后, 我们希望获得包含其图片和名称的开发人员列表。开发人员资料将以可滚动个人卡列表的形式显示。
  3. 查看开发者资料时, 我们希望能够将其添加到收藏夹或发送聘用请求。
基础
让我们快速回顾一下你在Android知识之上已经添加的内容:
  1. 如何设置开发环境以构建Glassware。
  2. 如何配置你的应用程序以使用标准的Glassware GUI主题。
  3. 如何使用自定义语音命令和菜单名称启动你的应用程序。
利用这些知识, 可以启动并运行新应用。你可以从上方更新Hello Glass应用, 也可以按照相同的步骤启动新的应用。将此应用程序命名为” Top Finder” , 并使你的voice_trigger.xml文件如下所示。
< ?xml version="1.0" encoding="utf-8"?> < trigger keyword="@string/app_name" > < constraints network="true" /> < /trigger>

network =” true” 约束告诉Glass在启动此应用时检查网络连接, 我们需要将其连接到srcmini开发人员列表。如果没有连接, Glass将显示警告消息。
主屏幕
让我们使应用程序的主屏幕看起来像这样:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
当你在屏幕上看到” ok glass” 消息时, 表示该应用程序在该位置具有语音激活菜单。在此处说出” ok glass” 一词会激活该位置的语音菜单。此短语是Glass预先定义的, 你无法更改。
你可以将” ok glass” 视为” 应用程序菜单” , 就像你在智能手机/平板电脑开发中使用的一样, 并且它的作用完全相同。就像你在屏幕上(通常3点或三行)” 点击” ” 应用程序菜单图标” 以打开Android应用程序菜单一样, 你需要说” ok glass” 才能在Glassware应用程序中打开语音激活菜单。
为了启用” ok glass” 菜单, 你需要从API请求FEATURE_VOICE_COMMANDS。为此, 请在MainActivity的onCreate处理程序中添加以下行:
getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS);

包含此功能的每个活动都将在底部中心以” ok glass” 文本呈现。
接下来需要做的是为主屏幕创建一个菜单。在res / menu文件夹中, 创建一个名为main.xml的新XML菜单定义。为简单起见, 我们将仅启用三个srcmini开发人员平台, 但可以根据需要随意进行更改。
它应具有以下内容:
< ?xml version="1.0" encoding="utf-8"?> < menu xmlns:android="http://schemas.android.com/apk/res/android"> < item android:id="@+id/find_android" android:title="Top Android developer" /> < item android:id="@+id/find_javascript" android:title="Top JavaScript developer" /> < item android:id="@+id/find_ios" android:title="Top iOS developer" /> < /menu>

你可能想知道为什么我选择了较长的菜单标题, 而不是仅仅选择Android, JavaScript和iOS。好吧, 原因很简单。 Glass开发团队的成员仍在改善语音识别。建议你在菜单中使用两个或三个词, 以便Glass可以更轻松地识别它们。
我已经提到过, ” ok glass” 菜单与标准的Android应用程序菜单没有什么不同。将菜单附加到活动实际上是相同的。只需在MainActivity中重写onCreatePanelMenu处理函数, 然后为刚刚创建的主菜单充气即可:
@Override public boolean onCreatePanelMenu(int featureId, Menu menu){ if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS || featureId ==Window.FEATURE_OPTIONS_PANEL) { getMenuInflater().inflate(R.menu.main, menu); return true; } return super.onCreatePanelMenu(featureId, menu); }

现在我们需要添加一个菜单处理程序。在执行此操作之前, 请创建一个名为findDevelopers的空方法。我们稍后将返回此位置开始搜索并显示结果。之后, 你可以覆盖菜单处理程序。
public void findDevelopers(String platform){ } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS || featureId ==Window.FEATURE_OPTIONS_PANEL) { switch (item.getItemId()) { case R.id.find_android: findDevelopers("Android"); break; case R.id.find_javascript: findDevelopers("Java Script"); break; case R.id.find_ios: findDevelopers("iOS"); break; } return true; } return super.onMenuItemSelected(featureId, item); }

现在该使我们的示例Google Glass应用程序的主屏幕漂亮。将srcmini徽标作为res / drawable / logo.png导入到你的应用程序中。我用了这张图片:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
在你的MainActivity类中, 进行以下更改。
确保在类的开头声明以下私有变量:
private CardScrollView mCardScroller; private View mView; private GestureDetector mGestureDetector;

更改buildView方法以自定义Card布局:
private View buildView() { Card card = new Card(this); card.setText(R.string.app_name); card.setImageLayout(Card.ImageLayout.LEFT); card.addImage(R.drawable.logo); return card.getView(); }

并更改你的onCreate处理程序, 如下所示:
protected void onCreate(Bundle bundle) { super.onCreate(bundle); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS); mView = buildView(); mCardScroller = new CardScrollView(this); mCardScroller.setAdapter(new CardScrollAdapter() { @Override public int getCount() { return 1; } @Override public Object getItem(int position) { return mView; } @Override public View getView(int position, View convertView, ViewGroup parent) { return mView; } @Override public int getPosition(Object item) { if (mView.equals(item)) { return 0; } return AdapterView.INVALID_POSITION; } }); // Handle the TAP event. mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { openOptionsMenu(); } }); mGestureDetector = createGestureDetector(this); setContentView(mCardScroller); }

如我之前所说, 我们希望将点击激活的菜单与” ok glass” 一起包含在内, 因此只需像在Android应用中那样启用手势即可。在MainActivity类中添加以下方法:
private GestureDetector createGestureDetector(Context context) { GestureDetector gestureDetector = new GestureDetector(context); //Create a base listener for generic gestures gestureDetector.setBaseListener( new GestureDetector.BaseListener() { @Override public boolean onGesture(Gesture gesture) { if (gesture == Gesture.TAP) { openOptionsMenu(); return true; } else if (gesture == Gesture.TWO_TAP) { // do something on two finger tap return true; } else if (gesture == Gesture.SWIPE_RIGHT) { // do something on right (forward) swipe return true; } else if (gesture == Gesture.SWIPE_LEFT) { // do something on left (backwards) swipe return true; } else if (gesture == Gesture.SWIPE_DOWN){ finish(); } return false; } }); gestureDetector.setFingerListener(new GestureDetector.FingerListener() { @Override public void onFingerCountChanged(int previousCount, int currentCount) { // do something on finger count changes } }); gestureDetector.setScrollListener(new GestureDetector.ScrollListener() { @Override public boolean onScroll(float displacement, float delta, float velocity) { // do something on scrolling return true; } }); return gestureDetector; }@Override public boolean onGenericMotionEvent(MotionEvent event) { if (mGestureDetector != null) { return mGestureDetector.onMotionEvent(event); } return false; }

就是这样!现在, 你可以启动你的应用并尝试两种激活菜单的方法。如果你说” ok glass” , 你会在屏幕上看到三个菜单项, 如果你点击玻璃, 则会打开一个可滚动菜单。要浏览菜单项, 可以前后滑动。
语音菜单如下所示:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
这是手势菜单:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
如果选择菜单项, 则将不会发生任何事情, 因为findDevelopers方法尚未实现。
开发者屏幕
我们将继续使用默认的Glass Card布局, 左侧为图片, 右侧为文字, 并提供一些页脚信息。有关设计卡片的最佳做法的更多信息, 请参阅Google Glass样式指南。
我们的开发者资料由简单的属性定义:
  1. 名称
  2. 图片
  3. 开发平台
因此, 请确保在我们的应用中具有适当的类结构。在你的java / models文件夹中创建一个名为DeveloperModel.java的新类。我们希望此类可序列化, 因为它将包含列表中的配置文件。
public class DeveloperModel implements Serializable { private String name; public String getName(){ return name; } public void setName(String name){ this.name=name; } private String platform; public String getPlatform(){ return platform; } public void setPlatform(String platform){ this.platform=platform; } private String image; public String getImage(){ return image; } public void setImage(String image){ this.image=image; } }

我们希望卡与开发人员资料数据紧密绑定。由于默认的CardScrollAdapter就其数据模型而言有点通用, 因此我们需要对其进行扩展并使其成为我们自己的模型。在你的java / adapters文件夹中创建DeveloperAdapter.java:
public class DeveloperAdapter extends CardScrollAdapter { private List< Card> mCards; private List< DeveloperModel> mData; public DeveloperAdapter(List< Card> cards){ this.mCards = cards; } @Override public int getCount() { return mCards.size(); } @Override public Object getItem(int i) { return mCards.get(i); } @Override public View getView(int i, View view, ViewGroup viewGroup) { return mCards.get(i).getView(); } @Override public int getPosition(Object o) { return this.mCards.indexOf(o); } }

我们不希望将搜索结果添加到应用程序的主屏幕上, 因此我们将创建新的活动来进行搜索并显示结果。在MainActivity旁边创建一个新的活动ResultsActivity(可能在java / com.helloglass中)。
确保它扩展了活动。
接下来, 我们需要为我们的开发者资料卡指定一个菜单。创建一个新菜单developer.xml, 其中包含以下内容:
< ?xml version="1.0" encoding="utf-8"?> < menu xmlns:android="http://schemas.android.com/apk/res/android"> < item android:id="@+id/developer_fav" android:title="Add to favorites" /> < item android:id="@+id/developer_hire" android:title="Hire" /> < item android:id="@+id/go_back" android:title="Go back" /> < /menu>

要在ResultsActivity和MainActivity之间传递参数, 请在ResultsActivity类的开头添加以下行:
public static final String SEARCH = "search"; private String mPlatform="Android";

确保将新活动添加到清单文件中:
< activity android:name=".ResultsActivity" android:immersive="true" android:icon="@drawable/ic_launcher" android:label="@string/title_activityresults" android:parentActivityName=".MainActivity"> < meta-data android:name="android.support.PARENT_ACTIVITY" android:value="http://www.srcmini.com/com.eloptico.MainActivity" /> < /activity>

设置ResultsActivity的初始屏幕和配置卡与我们在MainActivity上所做的非常相似。首先检查是否在开始时定义了卡片和滚动条:
private CardScrollView mCardScroller; private List< Card> mCards; private GestureDetector mGestureDetector;

创建一个临时搜索方法, 稍后我们将再次实施。向配置文件列表添加新卡就像向阵列添加项目一样简单。我们也将这个方法命名为findDevelopers, 但这属于ResultsActivity:
private void findDevelopers(String platform){ for (int i=1; i< =10; i++){ Card card = new Card(this); card.setText(platform+" "+Integer.toString(i)); card.setTimestamp(platform); card.setImageLayout(Card.ImageLayout.LEFT); card.addImage(R.drawable.ic_person_50); mCards.add(card); } mCardScroller.setSelection(0); }

现在返回你的MainActivity并在那里更新findDevelopers以启动ResultsActivity并传??入platform属性:
public void findDevelopers(String platform){ Intent resultsIntent = new Intent(this, ResultsActivity.class); resultsIntent.putExtra(ResultsActivity.SEARCH, platform); startActivity(resultsIntent); }

将开发人员菜单附加到ResultsActivity。你将可以在任何个人资料卡上打开菜单。
@Override public boolean onCreatePanelMenu(int featureId, Menu menu){ if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS || featureId ==Window.FEATURE_OPTIONS_PANEL) { getMenuInflater().inflate(R.menu.developer, menu); return true; } return super.onCreatePanelMenu(featureId, menu); }

就像之前一样, 在显示ResultsActivity时启用手势来处理Glass上的触摸板。为此, 只需在onGesture(Gesture手势)方法中调用openOptionsMenu()即可:
private GestureDetector createGestureDetector(Context context) { // … @Override public boolean onGesture(Gesture gesture) { if (gesture == Gesture.TAP) { openOptionsMenu(); return true; } else if // …

另外, 将菜单处理程序添加到开发人员相关的操作中。我们将暂时保留简单的Toast消息。
@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS || featureId ==Window.FEATURE_OPTIONS_PANEL) { switch (item.getItemId()) { case R.id.developer_fav: Toast.makeText(getApplicationContext(), "Favorite", Toast.LENGTH_LONG).show(); break; case R.id.developer_hire: Toast.makeText(getApplicationContext(), "Message", Toast.LENGTH_LONG).show(); break; case R.id.go_back: break; } return true; } return super.onMenuItemSelected(featureId, item); }

每个应用程序都应使用一些美观的视觉元素, 图标等。Google Glass团队提供了很多通用的标准化图标, 供Glass开发人员免费在其应用程序中使用。你可以在其库中找到一整套标准的Glass图标及其字体
目前, 你只需要一个图标ic_person_50.png, 所以继续将其下载到你的res \ drawable文件夹中。我们将使用此图标, 而不是下载开发人员的图片。
Glass应用程序开发教程中剩下的最后一件事是覆盖ResultsActivity上的onCreate处理程序, 在这里我们将检查从MainActivity转发了哪个开发平台并填充了列表。
@Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS); mCardScroller = new CardScrollView(this); mCards = new ArrayList< Card> (); if(getIntent().hasExtra(SEARCH)){ mPlatform = getIntent().getStringExtra(SEARCH); }findDevelopers(mPlatform); mCardScroller.setAdapter(new DeveloperAdapter(mCards)); // Handle the TAP event. mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { openOptionsMenu(); } }); mGestureDetector = createGestureDetector(this); setContentView(mCardScroller); }

你可以保留与MainActivity中相同的onResume和onPause方法。
如果立即启动应用程序, 则可以根据MainActivity上选择的菜单检查如何动态创建开发人员资料。同样, 你可以选择使用” 确定的玻璃杯” 或点击触摸板或使用语音激活来显示菜单。这是目前” 第十位Android开发者” 个人资料的外观:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
轻击会弹出触摸菜单:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
说” ok glass” 会弹出语音菜单:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
从列表中向下滑动即可返回到应用的主屏幕。
从Internet获取个人资料
总结一下, 让我们在菜单中填入JavaScript, Android和iOS的十大srcmini开发人员的真实信息。
你将需要下载其个人资料图片并通过HTTP使其可用, 或者仅直接从srcmini.com使用URL。
由于构建Web爬网程序只是为了在srcmini中获得顶尖开发人员的名字, 因此本文可能不走弯路, 因此, 我创建了JSON文件供你用于Android, JavaScript和iOS。
在你的应用程序中, 你需要做的第一件事就是请求从Android OS访问互联网。将以下行添加到清单文件中
< uses-permission android:name="com.google.android.glass.permission.INTERNET"/>

请注意, Glass不允许你直接使用HTTP请求来阻止主线程。你将需要以异步方式处理JSON下载和单个图像。你可以使用异步任务, 创建自己的下载服务或意图, 或在日常工作中选择喜欢的任何东西。
构建此功能并非特定于Google Glass, 因此我将跳过代码片段。如果你不断进取, 并使最后的功能正常工作, 则你的个人资料卡应如下所示:
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
有抱负的Google Glass开发者教程(构建你的第一个Glass应用)

文章图片
教程总结 我确实希望你在阅读此Google Glass开发教程并构建自己的第一个Glassware应用程序后感到开心。到现在为止, 你应该对为Glass编写应用程序与任何其他Android平台没有太大不同的想法感到满意。
至此, 你已经了解了如何扩展Google Glass语音激活的主屏幕, 如何创建自己的语音激活菜单, 以及如何将语音控件与触摸手势结合在一起。你还应该了解Glass UI的概念和基本构建块, 例如卡片, 布局和元素。你已经了解了如何动态创建即时贴以及如何在不同的活动之间进行导航。
要深入研究, 请访问developer.google.com/glass, 访问Google的开发人员资源。当你开始构建更复杂的应用程序时, 它将被证明是非常有用的资源。
请注意, Glass仍处于开发阶段, 在进入消费市场之前, 可能还会实施更多的增强功能。考虑到这一点, 我为你提供一个重要说明:
语音识别方面还有很多工作要做, 你可能会在尝试开始活动或填写一些信息时对自己虚构的朋友大喊大叫。不用担心-尝试Google Glass开发的每个人都有相同的感受, 所以你并不孤单。
技术将得到改善, 玻璃将立即准备零售。它肯定会在商店上市时引起巨大的轰动, 所以我希望你和我一样成为第一个跻身这一令人兴奋的技术前沿的人们感到兴奋!
【有抱负的Google Glass开发者教程(构建你的第一个Glass应用)】大声疾呼:本文中的屏幕快照使用[电子邮件保护]制作。

    推荐阅读