此 Android 项目是“连续共享元素转换:RecyclerView 到 ViewPager”一文的随附示例。此处的代码提供了 Android Fragment 之间特定转换的实现。此示例演示了如何实现从 <code>RecyclerView</code> 中的图片到 <code>ViewPager</code> 中的图片的转换以及如何实现反向转换,在此过程中使用“共享元素”确定哪些视图参与转换以及如何转换。此外,还处理了一种棘手的情况,那就是在分页显示先前在屏幕外的内容后转换回网格。<strong>这不是官方支持的 Google 产品。</strong>
此演示实现了一个实时高动态范围相机取景器,具体方法是:将传感器曝光时间设为在偶数帧和奇数帧上交替使用两个曝光值,然后在每次捕获新的帧后,将最新的两个帧合成到一起。
此示例演示了如何通过 Android Beam 传输大型文件。在通过 NFC 初次握手后,文件将通过蓝牙或 Wi-Fi 直连等辅助高速信道传输。如需使用此功能,您必须安装 Android 4.1 (Jelly Bean) 或更高版本。与传统 Beam 不同的是,您的应用不会在接收设备上收到 Intent。系统会改为将文件保存到磁盘上,并显示通知以说明用户可以选择使用标准的 ACTION_VIEW Intent 打开文件。
此示例演示了如何利用蓝牙低功耗 API 播发少量数据,以及如何扫描这些播发内容(需要两台设备才能查看完整操作过程)。
此示例演示了如何利用蓝牙 LE 通用属性配置文件 (GATT) 在设备之间传输任意数据。
此示例演示了如何使用自动填充框架,其中包括具有应自动填充的视图的客户端 Activity 实现,以及可为客户端 Activity 提供自动填充数据的服务。
此示例演示了如何利用 Commit Content API 编写接受通过键盘发送的富媒体内容(如图片)的应用。
此示例演示了如何利用 Commit Content API 编写向文本字段发送富媒体内容(如图片)的键盘应用。
此示例演示了“画中画”模式在手持设备上的基本用法。此示例会播放一段视频。应用进入“画中画”模式后,该视频会继续播放。在“画中画”屏幕中,应用会显示可暂停或恢复视频播放的操作项。
此示例演示了“画中画”模式在手持设备上的基本用法。此示例会播放一段视频。应用进入“画中画”模式后,该视频会继续播放。在“画中画”屏幕中,应用会显示可暂停或恢复视频播放的操作项。
此基本示例展示了在 Android M 及更高版本中提供的运行时权限。它展示了如何利用全新的运行时权限 API 通过支持库检查和请求权限。
此基本示例展示了在 Android M 及更高版本中提供的运行时权限。它展示了如何利用全新的运行时权限 API 通过支持库检查和请求权限。
此示例演示了如何在受设备保护的存储空间中存储数据;启动设备后,无论是在输入任何用户凭据(PIN 码/图案/密码)之前还是之后,该存储空间始终可用。
此示例演示了如何使用 Android 7.1 (API 25) 中引入的 Launcher Shortcuts API。借助此 API,应用可以定义一组 intent;当用户长按应用的启动器图标时,系统便会显示这些 intent。我们分别提供了关于在 XML 中静态注册链接以及在运行时动态注册链接的示例。
此示例演示了新的“Document Centric Apps”API 的基本用法。借助此 API,您可以在系统概览菜单中创建新文档,并使其状态在设备重新启动后保持不变。
此示例演示了如何使用 Android O 中引入的可下载字体功能。通过可下载字体功能,应用可向提供方请求特定字体,而无需打包字体或自行下载字体。这意味着,无需将字体捆绑为资源。
此示例演示了如何使用 Android O 中引入的可下载字体功能。通过可下载字体功能,应用可向提供方请求特定字体,而无需打包字体或自行下载字体。这意味着,无需将字体捆绑为资源。
此示例演示了如何使用 EmojiCompat 支持库。您可以使用此库来防止应用以豆腐块形式 (□) 显示缺失的表情符号。您既可以使用打包的表情符号字体,也可以使用可下载的表情符号字体。此示例展示了上述两种用法。
此示例演示了如何使用 EmojiCompat 支持库。您可以使用此库来防止应用以豆腐块形式 (□) 显示缺失的表情符号。您既可以使用打包的表情符号字体,也可以使用可下载的表情符号字体。此示例展示了上述两种用法。
此示例演示了针对移动应用和原生/本地 Wear 应用使用 NotificationStyle 通知(Inbox、BigPicture、BigText 和 Messaging)的最佳做法,还演示了 Wear 1.+ 和 Wear 2.0 上的通知功能。
此示例演示了如何使用 Android 5.0 的支持库中引入的 CardView。
此示例演示了如何使用 Android 5.0 的支持库中引入的 CardView。
此示例演示了如何使用 RecyclerView 借助 LinearLayoutManager 和 GridLayoutManager 布置元素,还演示了如何处理元素上的触摸事件。
此示例演示了如何使用 RecyclerView 借助 LinearLayoutManager 和 GridLayoutManager 布置元素,还演示了如何处理元素上的触摸事件。
此示例展示了如何处理在穿戴式设备和移动设备上都需要获得权限的远程数据。
这是一个简单的示例,演示了 Wear 2.0 的表盘主题和复杂功能。
一系列快速入门示例,演示了 Android 上的 Firebase API。如需了解详情,请访问 https://firebase.google.com。
一系列快速入门示例,演示了 Android 上的 Firebase API。如需了解详情,请访问 https://firebase.google.com。
此示例展示了如何在 Lollipop 中使用从一个 Activity 到另一个 Activity 的场景转换效果。将 changeImageTransform 和 changeBounds 结合使用可将图片网格转换为包含大图片和详细信息文本的 Activity。
一个基本应用,展示了如何使用 KitKat 中引入的过渡框架。该应用展示了供用户在不同的场景中进行选择的单选框,并使用不同的方式在各场景之间过渡。
此示例展示了如何实现自定义过渡,以扩展标准的 Transition 类。
此示例演示了如何针对 <code>Material Design</code> 使用动画插值器和路径动画。
关于 Material Design 运动的一系列演示。Material Design 提供了许多关于运动设计的例子。此示例展示了如何在 Android 上实现它们。 <li>了解运动</li> <li>速度</li> <li>编排</li> <li>自定义</li> “动画和过渡”一文介绍了如何在 Android 上使用各种动画 API。演示的所有源代码都在演示软件包中。布局 > 渐隐 <img src="screenshots/dissolve.gif" height="400" alt="dissolve" /> 布局 > 淡入淡出 <img src="screenshots/fadethrough.gif" height="400" alt="fadethrough" /> 布局 > FAB 转换 <img src="screenshots/fabtransformation.gif" height="400" alt="fab" /> 列表 > 重新排序 <img src="screenshots/reordering.gif" height="400" alt="reorder" /> 列表 > 交错 <img src="screenshots/stagger.gif" height="400" alt="stagger" /> 列表 > 振荡 <img src="screenshots/oscillation.gif" height="400" alt="oscillation" /> 导航 > 共享元素 <img src="screenshots/sharedelement.gif" height="400" alt="sharedelement" /> 导航 > 淡入淡出 <img src="screenshots/navigationfadethrough.gif" height="400" alt="navfadethrough" />
此示例演示了圆形揭露效果。它展示了如何创建 ViewAnimationUtils,以及如何定义圆形揭露动画的参数,包括起始位置和半径。
此示例应用演示了如何将 Google Analytics for Firebase 集成到免安装应用中。
此示例应用演示了如何使用 Cookie API。它展示了如何使用 Android Framework API 和 InstantApps Play Services API 存储和检索值。用法 此 API 既适用于免安装应用,也适用于安装式应用,并且允许将用户生成的数据从免安装应用迁移到安装式应用。 此 API 的流程如下: <li>检查 Cookie 是否符合要求。</li> <li>在免安装应用中存储数据。</li> <li>从安装式应用中检索数据。</li> <p>此 API 可通过 PackageManagerCompat 支持 API 26 或更高级别。</p> 构建变体 此示例具有两个构建变体: <li><code>framework</code> -> Android 8.0(API 级别 26)或更高版本</li> <li><code>playServices</code> -> 任何 API 级别</li> 这两个构建变体提供相同的功能,但一个使用的是 Android Framework API,而另一个使用的是 InstantApps Play Services API。 使用此示例测试 API <li>在运行配置中选中“deploy as instant app”来运行应用</li> <li>存储一些数据</li> <li>在运行配置中取消选中“deploy as instant app”来运行应用</li> <li>检索之前存储的数据</li>
此示例应用演示了如何使用 [Install API](https://developers.google.com/android/reference/com/google/android/gms/instantapps/InstantApps.html#showInstallPrompt(android.app.Activity,%20android.content.Intent,%20int,%20java.lang.String))。该 API 会触发 Intent 以在设备上安装应用。该调用还会接受在安装完成后触发的 Intent。如果应用想要利用此 API,开发者需要在 Google Play 商店中发布相应的安装式应用。此外,免安装模块和应用模块上的 applicationId 必须一致。
此示例应用演示了如何构建具有相同行为的安装式应用和免安装应用。免安装应用的功能分为两项功能,这两项功能可在设备上单独启动。
此示例演示了如何在 Android 免安装应用中创建启动服务或绑定服务。
此示例应用演示了如何使用 Storage API。它与搭载<strong>低于 API 级别 26</strong> 的 Android 版本的设备相关。在搭载 API 级别 26 或更高版本的设备上,Android 框架负责将用户数据从免安装应用迁移到安装式应用。安装完成后,安装式应用通过使用此 API 传输免安装应用中存储的数据,为用户提供无缝的体验。 用法 在安装式应用中,调用 [Storage API](https://developers.google.com/android/reference/com/google/android/gms/instantapps/InstantAppsClient.html#getInstantAppData())。借助该 API,您可以访问免安装应用中存储的数据。如需详细了解数据存储,请参阅[这篇文档](https://developers.google.com/android/reference/com/google/android/gms/instantapps/InstantAppsClient.html#getInstantAppData())。
这是一个 API 示例,展示了如何在 Flowable 对象中实现可观察查询。
这是一个 API 示例,展示了如何在 Kotlin 中使用 Flowable 对象。
此示例展示了以下架构组件: <li>Room</li> <li>ViewModel</li> <li>LiveData</li>
这是一个将 Android 架构组件与 Dagger 2 搭配使用的示例应用。<strong>注意</strong>:这是一个相对来说比较复杂且比较完整的示例;因此,如果您不熟悉架构组件,我们强烈建议您先查看此代码库中的其他示例。
此示例展示了以下架构组件: <li>LiveData</li> <li>ViewModel</li> <li>数据绑定</li> 此外,还展示了以下工件: <li>androidx.lifecycle.lifecycle-livedata-ktx</li> 此项目展示了如何使用 <code>liveData</code> 构建器将其与 Kotlin 的协程集成。
功能 此示例展示了遵循导航原则的底部导航视图的行为。 <li>固定的起始目的地</li> <li>导航状态应通过目的地堆栈表示</li> <li>向上按钮绝不会使用户退出您的应用</li> <li>在应用的任务中,向上按钮和返回按钮的行为完全相同</li> <li>深层链接和导航到某个目的地应产生相同的堆栈</li> 请查看界面测试,以了解特定的场景。
此示例展示了以下架构组件: <li>Paging</li> <li>Room</li> <li>ViewModel</li> <li>LiveData</li>
此示例演示了如何使用 Android 的内容提供程序框架公开 Room 持久性库中存储的数据。
这是一个用 Kotlin 编写的简单图像处理应用,展示了如何使用 WorkManager 执行后台工作。
Jetpack Compose。此示例的目的是展示 Material 组件、可拖动的界面元素、Compose 内的 Android 视图,以及界面状态的处理。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。
Jetnews 是一款使用 Jetpack Compose 构建的新闻阅读示例应用。此示例的目的是展示 Compose 的最新界面功能。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。
Jetcaster 是一款使用 Jetpack Compose 构建的播客示例应用。此示例的目的是展示动态主题和功能完善的架构。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。状态:🚧 进行中 🚧 Jetcaster 仍处于早期开发阶段,因此到目前为止只创建了一个屏幕。不过,已实现该应用的大部分架构,以及数据层和动态主题的早期阶段。
Jetchat 是一款使用 Jetpack Compose 构建的聊天示例应用。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。此示例展示了: <li>界面状态管理</li> <li>与以下架构组件集成:Navigation、Fragment、LiveData 和 ViewModel</li> <li>返回按钮的处理</li> <li>文本输入和焦点管理</li> <li>多种类型的动画和过渡</li> <li>发生配置更改后保持不变的已保存状态</li> <li>基本的 Material Design 主题</li> <li>界面测试</li> <img src="screenshots/jetchat.gif" /> 状态:🚧 进行中 🚧 Jetchat 仍在开发中,某些功能尚未实现。
Jetsnack 是一款使用 Jetpack Compose 构建的快餐订购示例应用。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。此示例展示了: <li>如何实现自定义设计系统</li> <li>自定义布局</li> <li>动画</li> <img src="screenshots/jetsnack.gif" /> 状态:🚧 进行中 🚧 Jetsnack 仍在开发中,某些屏幕尚未实现。
Jetsurvey 是一款使用 Jetpack Compose 构建的调查问卷示例应用。此示例的目的是展示 Compose 的文本输入、验证和状态功能。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。
此示例是 Owl,它是 Material Design 研究应用。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。此实例展示了: <li>Material 主题和浅色/深色主题</li> <li>自定义布局</li> <li>动画</li>
此示例是 Rally,它是 Material Design 研究应用。如需试用此示例应用,您需要使用最新 Canary 版的 Android Studio 4.2。您可以克隆此代码库,也可以按照此处的步骤从 Android Studio 导入项目。此示例展示了: <li>Material 主题</li> <li>自定义布局和可重复使用的元素</li> <li>图表和表格</li> <li>动画</li> <img src="screenshots/rally.gif" /> 状态:🚧 进行中 🚧 此示例仍在开发中,某些功能尚未实现。
此示例展示了如何使用所有基本的 Bluetooth API 功能在两台 Android 设备之间通过蓝牙实现双向文字聊天。
此示例演示了如何利用 HttpsURLConnection 连接到网络并获取原始 HTML。AsyncTask 用于在后台线程上执行获取操作。
此示例演示了在 Android 中使用 WifiRTT API 的最佳做法。此外,这是一款很有用的应用,可用于测试启用了 Wifi-RTT 的手机和接入点,并验证估算距离是否接近它们之间的实际距离。
此示例展示了数据绑定库的以下功能: <li>布局变量和表达式</li> <li>通过可观察字段、LiveData 和可观察类实现可观察性</li> <li>绑定适配器、绑定方法和绑定转换器</li> <li>与 ViewModel 无缝集成</li> 它在两个不同的屏幕中展示了常见的不当做法及其解决方案。
此示例借助一个显示锻炼计时器的应用展示了数据绑定库的以下功能。 <li>双向数据绑定</li> <li>双向数据绑定的替代方案</li> <li>具有多个参数的绑定适配器</li> <li>动画与绑定适配器</li> <li>绑定转换器和逆转换器</li> <li>数据绑定与 ViewModel 和 Kotlin</li> <li>Activity 中没有界面框架调用</li> <li>测试</li>
此示例演示了如何作为个人资料所有者设置对其他应用的限制。可以使用 AppRestrictionSchema 示例设置限制。
这是一个基本应用,展示了如何让设备管理员使用 Android Device Administration API 限制用户活动。此应用会导出启用或停用界面控件的自定义政策。设备管理应用可以按照企业管理员的指示针对此政策强制采用特定的值。
此示例演示了如何在支持多用户功能的设备上使用应用限制功能。
此示例演示了 Android 5.0 Lollipop 中引入的 Managed Profile API 的基本功能。您可以将该应用设置为配置文件所有者,并使用该应用在新创建的托管配置文件中启用/停用应用。您还可以设置对某些应用的限制、启用/停用个人资料之间的 Intent 转发,以及擦除与个人资料关联的所有数据。
此示例演示了如何使用某些设备所有者功能。作为设备所有者,您可以配置全局设置,例如自动确定时间和时区。您可以通过首选的 intent 处理程序强制要求使用特定的启动器。
此示例演示了如何使用 NFC 为新设备配置设备所有者。设备所有者是一种特殊类型的设备管理器,可以控制设备的安全性和配置。此示例本身并不是设备所有者,而是一个编程应用,可向未配置的对等设备发送 NFC 消息,告知其设置指定的设备所有者应用。
此示例演示了如何有效地将大型位图从主界面线程中分流出来、缓存位图(在内存中和磁盘上)、管理位图内存,以及在 ViewPager 和 ListView/GridView 等界面元素中显示位图。
此示例展示了如何以编程方式以及以 XML 中可绘制资源的形式将色调调节和颜色滤镜应用到可绘制对象。通过“tint”和“tintMode”参数,在九宫格可绘制对象上设置了色调调节。引用了颜色状态列表作为色调颜色,该列表定义了不同视图状态(例如已停用/已启用、已聚焦、已按下或已选中)的颜色。通过“setColorFilter”方法,以编程方式将色调调节应用到了可绘制对象,其中引用了颜色和 PorterDuff 混合模式。您可以从界面中更改颜色和混合模式,以查看不同选项的效果。
此示例展示了如何使用 Android 4.0 中引入的 Media Effects API。
此示例演示了如何使用 Android 5.0 Lollipop 中引入的 PdfRenderer 在屏幕上显示 PDF 文档。
此示例演示了如何使用 Android 5.0 Lollipop 中引入的 PdfRenderer 在屏幕上显示 PDF 文档。
此示例应用演示了如何在新设备设置期间使用 AccountTransferApi 转移帐号。
此示例演示了如何在同一应用中同时使用 Credentials API (SmartLock for Passwords) 和 Google Sign In API。如需了解详情,请访问 https://developers.google.com/identity/。
此示例演示了如何使用 Play 服务的 SMS Verification API 获取特别标记的短信(标记可以将短信与 APK 关联),而无需获得完整的短信检索权限 (SMS_READ)。
Android AutofillFramework 示例 (Kotlin) 此示例演示了如何使用自动填充框架,其中包括具有应自动填充的视图的客户端 Activity 的实现,以及可为客户端 Activity 提供自动填充数据的服务。
此示例可以检测视图上的手势并记录这些手势。如需尝试此示例,请试着拖动或点按文本。
此示例演示了如何使用 MotionEvent 属性跟踪多个触摸事件中的各项触摸操作。
演示了如何使用 ActivityRecognitionApi 识别用户当前的活动,如走路、开车或站着不动。 简介 演示了如何使用 ActivityRecognitionApi 识别用户当前的活动,如走路、开车或站着不动。用户可以按“请求更新”按钮请求活动更新,也可以使用“移除更新”按钮停止接收更新。此示例使用 <code>IntentService</code> 处理检测到的活动变化,系统会使用 DetectedActivity 类针对各种 DetectedActivity 类型发送这些活动变化。每个 <code>DetectedActivity</code> 都与置信度关联,置信度是 0 到 100 之间的整数。如需运行此示例,<strong>必须启用位置信息服务</strong>。
演示了如何使用 Google Play 服务的 Location API 检索设备的最近一次的已知位置信息。 简介 此示例展示了一种简单方法来获取设备的最近一次的已知位置信息,这些信息通常等同于设备的当前位置信息。返回的位置信息的准确性基于您已请求的位置权限以及设备目前正在使用的位置传感器。如需运行此示例,<strong>必须启用位置信息服务</strong>。此示例使用 FusedLocationProviderClient。另请参阅此示例的 Kotlin 版本。
演示了如何使用 Google Play 服务的 Location API 检索设备的最近一次的已知位置信息。 简介 此示例展示了一种简单方法来获取设备的最近一次的已知位置信息,这些信息通常等同于设备的当前位置信息。返回的位置信息的准确性基于您已请求的位置权限以及设备目前正在使用的位置传感器。如需运行此示例,<strong>必须启用位置信息服务</strong>。此示例使用 FusedLocationProviderClient。
演示了如何使用 GeofencingApi 创建和移除地理围栏。监控地理围栏转换,并在设备进入或离开地理围栏时创建通知。 简介 地理围栏将对用户当前所在地的感知与对附近特点的感知相结合,定义为用户与可能关注的地点的邻近度。如需标记关注地点,您可以指定其经纬度。如需调整与相应地点的邻近度,您可以添加半径。经纬度加半径可以定义一个地理围栏。您可以同时有多个活跃的地理围栏。位置信息服务将地理围栏视为区域,而不是点和邻近度。这样一来,它就能检测到用户何时进入或离开地理围栏。对于每个地理围栏,您可以要求位置信息服务向您发送进入事件和/或离开事件。此外,您还可以指定以毫秒为单位的有效期限,以限制地理围栏的持续时间。当地理围栏过期后,位置信息服务会自动将其移除。如需运行此示例,<strong>必须启用位置信息服务</strong>。
演示了如何使用 Geocode API 和反向地理编码将设备的位置显示为地址。 简介 此示例在此代码库中包含的 BasicLocationSample 和 LocationUdpates 示例的基础上构建而成。这些示例仅使用经纬度值。虽然经纬度对于计算距离或显示在地图上的位置很有用,但是在许多情况下,位置的地址更有用。Android 框架位置信息 API 提供了一个 Geocode API,它包含 [getFromLocation()](http://developer.android.com/reference/android/location/Geocoder.html#getFromLocation(double, double, int)) 方法,该方法会返回与给定经纬度对应的估计街道地址。此示例使用 <code>getFromLocation()</code> 方法执行位置地址查询,使用 IntentService 获取位置地址,并使用 ResultReceiver 处理 IntentService 发送的结果。如需运行此示例,<strong>必须启用位置信息服务</strong>。
演示了如何使用 Geocode API 和反向地理编码将设备的位置显示为地址。 简介 此示例在此代码库中包含的 BasicLocationSample 和 LocationUdpates 示例的基础上构建而成。这些示例仅使用经纬度值。虽然经纬度对于计算距离或显示在地图上的位置很有用,但是在许多情况下,位置的地址更有用。Android 框架位置信息 API 提供了一个 Geocode API,它包含 [getFromLocation()]http://developer.android.com/reference/android/location/Geocoder.html#getFromLocation(double, double, int)) 方法,该方法会返回与给定经纬度对应的估计街道地址。此示例使用 <code>getFromLocation()</code> 方法执行位置地址查询,使用 IntentService 获取位置地址,并使用 ResultReceiver 处理 IntentService 发送的结果。如需运行此示例,<strong>必须启用位置信息服务</strong>。
演示了如何使用 Fused Location Provider API 获取有关设备位置信息的更新。一体化位置信息提供程序是 Google Play 服务的 Location API 的一部分。 简介 此示例在此代码库中包含的 BasicLocationSample 示例的基础上构建而成,允许用户请求定期位置信息更新。作为响应,API 会根据 Wi-Fi 和 GPS(全球定位系统)等当前可用的位置信息提供程序,以可用的最佳位置信息定期更新应用。位置信息的准确性也由您已请求的位置权限(我们在此处使用 ACCESS_FINE_LOCATION)和您在位置信息请求中设置的选项决定。此示例使用 FusedLocationProviderClient。如需运行此示例,<strong>必须启用位置信息服务</strong>。
此示例展示了如何使用 MediaCoder 对视频进行解码,使用 TimeAnimator 将呈现命令与系统显示框架呈现同步,并最终将其呈现到 TextureView。
此示例演示了如何使用 MediaRouter API 在辅助显示屏上显示内容。使用 ActionBar 中的“媒体路由操作项”选择一个输出设备。如果您的设备支持 Miracast 无线显示,您可能需要在系统设置中启用“无线显示”功能。您还可以通过“开发者选项”启用辅助屏幕模拟功能。连接后,可使用“更改颜色”按钮更改辅助屏幕的背景颜色。
此示例使用相机/摄像机作为 MediaRecorder API 的 A/V 来源,并使用 TextureView 作为相机预览,它将代码限制为 API 14+。TextureView 可轻松地替换为 SurfaceView,以便在旧款设备上运行。
演示了如何创建自定义媒体路由提供程序。
此示例演示了如何使用 MIDI API 接收和处理来自所连接设备的 MIDI 信号。
此示例演示了如何使用 MIDI API 接收和播放来自所连接输入设备(MIDI 键盘)的 MIDI 消息。
此示例演示了如何使用 Media Projection API 实时地对设备屏幕进行截图,并将其显示在 SurfaceView 上。
此示例展示了如何实现一个允许从本地存储空间(APK 中的资源文件夹)或通过 HTTP(S) 从远程来源播放视频的媒体应用。1. 它支持播放列表,这样可以将多个视频串在一起,一个接一个地播放,也可以在它们之间跳跃。2. 它支持 <code>MediaSession</code>,这样外部蓝牙耳机可以控制您的媒体(播放、暂停、跳至下一个等等),并查看当前正在播放的媒体(比如,通过车载蓝牙耳机控制和查看)。3. 它支持音频焦点,这样您可以遵循 Android 音频焦点系统的准则,如果有其他内容正在播放,您可以暂停它自身的播放。4. 它支持画中画 (PIP),这样当用户在其他应用中时,该应用可以继续在最小化窗口中播放视频。如需详细了解 <code>ExoPlayer</code>、<code>MediaSession</code>、音频焦点和 PIP,请阅读 Medium 上的这一系列文章,这些文章详细介绍了这些 API。
此示例演示了如何在 Android Fast Audio Path 中使用 OpenSL ES 创建播放器和录制器,并将其连接到环回音频。大多数 Android 设备上都有一个经过优化的音频路径(调整后可降低延迟)。此示例会创建要在这一高度优化的音频路径(有时称为原生音频路径、低延迟路径或快速音频路径)中运行的播放器/录制器。我们已根据以下配置验证该应用:* Android L 和 Android One;* Android M Nexus 5 和 Nexus 9。此示例使用了支持 CMake 的新 Android Studio,并展示了如何将 Android Studio 版本 2.2.0 与共享的 stl 库搭配使用;如需了解详情,请参阅 CMakeLists.txt。<strong>请注意,OpenSL ES 是 Oboe 库。</strong></em><em>
Bitmap Plasma 是一个 Android 示例,它使用 JNI 通过 C 代码在 Android 位图中呈现等离子效应。此示例使用支持 C++ 的新 Android Studio CMake 插件。
Endless Tunnel 是一个示例游戏,展示了如何:使用 Android Studio C++ 支持;使用 Android 原生 glue 实现游戏;实现操纵杆支持,包括适用于非触摸屏的可靠 DPAD 导航。此示例的目的并不在于展示编写游戏逻辑、加载资源等操作的最佳方式。我们特意让游戏本身保持基础状态,为的是强调 Android Studio C++ 集成。例如,此游戏在代码中包含硬编码的纹理和几何图形,这种硬编码对于像这样的小型演示游戏来说没问题,但无法很好地扩展到真实游戏中。此示例使用支持 C++ 的新 Android Studio CMake 插件。
gles3jni 是一个 Android C++ 示例,演示了如何在 JNI/原生代码中使用 OpenGL ES 3.0。与 OpenGL ES 2.0 路径相比,OpenGL ES 3.0 渲染路径使用了几项新功能:利用实例化渲染和顶点属性除数减少绘制调用次数和统一更改次数;利用顶点数组对象减少在每个帧上设置顶点属性状态所需的调用次数;显式分配属性位置,让您无需查询分配情况。此示例使用支持 C++ 的新 Android Studio CMake 插件。
Hello GL2 是一个 Android C++ 示例,它可以使用 GLES 2.0 API 绘制三角形。它会通过在常规 Android Java Activity 中创建的 GLSurfaceView,利用 JNI 以 C++ 执行渲染。此示例使用支持 C++ 的新 Android Studio CMake 插件。
Hello JNI 是一个 Android 示例,它从 Android Java Activity 中用 JNI 调用 C 代码。此示例使用了新的 Hello-CMake Codelab。
此示例是 Hello JNI 示例的附加示例,演示了如何通过 C 代码回调到 Java - 通过 C 代码创建 Java 类实例 - 调用 Java 类静态及非静态成员函数。此示例使用了支持 C++ 的新 Android Studio CMake 插件。
此 hello-libs 示例向您展示了如何使用 Android Studio 管理第三方 C/C++ 库。
Hello Oboe 是一个 Android 示例,它使用 Oboe 库以原生方式播放音频。Oboe 封装了 AAudio 和 OpenSLES,帮助开发者在各个 Android 版本的性能敏感型环境中播放和录制音频。Oboe 代码库提供了关于如何充分利用 Oboe API 的更多信息,以及一些更深入的示例和文档。此示例使用 Studio Prefab 功能从 Google Maven 下载预构建的 Oboe 库,您可以随时在以下文件中查看相关的 Prefab 步骤:- gradle.properties - app/build.gradle - app/src/main/cpp/CMakeLists.txt。如果您希望使用 Oboe 库源代码构建您的应用,请参阅 Oboe 代码库中的示例。
Native Activity 是一个 Android 示例,它会初始化 GLES 2.0 环境,并使用原生 Activity 读取 C 代码中的加速度计数据。此示例使用支持 C++ 的新 Android Studio CMake 插件。
Native Audio 是一个 Android 示例,它使用 JNI 通过 C++ OpenSLES API 播放和录制声音。所创建的录制器/播放器不在快速音频路径中。此示例使用支持 C++ 的新 Android Studio CMake 插件。<strong>请注意,OpenSL ES 是 Oboe 库。</strong></em><em>
Native Plasma 是一个 Android 示例,它使用原生 Activity 通过 C 代码在位图中呈现等离子效应。此示例使用支持 C++ 的新 Android Studio CMake 插件。
San Angeles 是一个演示的 Android 端口,它使用 GLES C/API 呈现程序化场景。如需详细了解原始 GLES 端口,请参阅原始 README。示例演示:- ABI APK 拆分
Sensor graph 是一个 C++ Android 示例,它使用 OpenGL 读取并绘制加速度计的当前值。它演示了以下原生 C++ API 的用法:- Assets。此示例使用支持 C++ 的新 Android Studio CMake 插件。
Teapots 是一系列使用 Teapot 呈现来演示 Android NDK 平台功能的 Android C++ 示例:- classic-teapot:使用 GLES 2.0 API 和 NativeActivity 呈现 Classic Teapot 网状网。- more-teapots:利用 GLES 3.0 实例呈现来呈现多个 Classic Teapot 实例。- choreographer-30fps:使用 Choreographer API 和 EGL Android 演示时间扩展功能来演示基于 API 级别的多帧速率节流技术。- textured-teapot:呈现 Classic Teapot 加上纹理。- image-decoder:与 textured-teapot 相同,只不过纹理解码是使用 Android 11 (Android NDK r21b) 中引入的 ImageDecoder API 完成的。此示例使用支持 C++ 的新 Android Studio CMake 插件。
WebP 是一个 Android 示例,其中包含一个小应用,用于演示如何在 Native Activity 视图中使用 WebP:<br />- 轮流解码 3 个 WebP 图片,并将其加载到屏幕上的缓冲区中。解码在单独的线程中进行。此示例使用新的 Android Studio CMake 插件。
此示例演示了如何使用 RenderScript 执行基本的图像处理。具体来说,它可让用户使用滑块来动态地调整图像饱和度。自定义 RenderScript 内核将调整饱和度,并在设备的 GPU 或系统认为合适的其他计算硬件上运行计算。
一个 RenderScriptIntrinsic 示例,演示了如何使用 RenderScript 内联函数。此示例会创建多个 RenderScript 内联函数,并显示具有各种参数的过滤结果。此外,此示例还展示了如何利用 StateListDrawable 扩展 RedioButton。
此示例演示了如何在应用中使用已注册的指纹验证用户身份。
Androidx Biometrics 库的示例
此示例应用展示了如何使用 FIDO2 API 通过公钥凭据进行注册和身份验证。FIDO2 API 用于搭载 Android N(API 级别 24)或更高版本的设备。
此示例演示了如何通过实现一个简单的记事应用,使用 Jetpack Security 库加密和解密文件。 <img src="screenshots/notes-list.png" height="400" alt="Screenshot showing a list of notes. The notes say 'Secret Note' and 'Encrypted Todo List'." />
此示例演示了如何为步测器和计步器设置 SensorEventListener。
<img src="screenshots/icon-web.png" height="256" alt="App Icon" /> 此示例演示了如何使用 Android 5.0 Lollipop 中引入的 PdfRenderer 在屏幕上显示 PDF 文档。
利用 Android 5.0(API 级别 21)的概念验证文件管理器。
此示例演示了如何使用 Android O 中引入的支持分页的 ContentProvider。ContentProvider 现在接受查询方法中的偏移和限制的附加参数以支持分页,而不是在单个查询方法调用中获取所有数据。
此示例演示了如何使用 Android O 中引入的支持分页的 ContentProvider。ContentProvider 现在接受查询方法中的偏移和限制的附加参数以支持分页,而不是在单个查询方法调用中获取所有数据。
<img src="screenshots/icon-web.png" height="256" alt="App Icon" /> 此示例演示了如何使用 Android 的 MediaStore 在 RecyclerView 中找到并显示用户图片。
借助 OPEN_DOCUMENT intent,客户端应用可以访问设备上的文档提供程序列表,并在其中的任何提供程序中选择文件。
此示例展示了如何使用 Android 4.4 中提供的存储访问框架实现简单的文档提供程序。
这是一款园艺应用,展示了使用 Android Jetpack 进行 Android 开发的最佳做法。Android Sunflower 目前正在大力开发。请注意,某些更改(如数据库架构修改)无法向后兼容,因此可能会导致应用崩溃。在这种情况下,请卸载并重新安装应用。
如果您刚开始接触 Android 单元测试,可以先试试此示例。此项目使用 Gradle 构建系统和 Android Gradle 插件支持进行单元测试。<em></em>您既可以从 IDE 集成(如 Android Studio)中受益,也可以在命令行中运行测试。单元测试在开发机器中的本地 JVM 上运行。Android Gradle 插件会编译应用的源代码,并使用 Gradle 测试任务执行代码。测试是根据修改后的 android.jar 版本执行的,其中所有的最终修饰符都被去掉了。这样,您就可以使用热门的模拟库,例如 Mockito。如需了解详情,请访问 http://tools.android.com/tech-docs/unit-testing-support。
如果您刚开始接触 Android 单元测试,可以先试试此示例。此项目使用 Gradle 构建系统和 Android Gradle 插件支持进行单元测试。<em></em>您既可以从 IDE 集成(如 Android Studio)中受益,也可以在命令行中运行测试。单元测试在开发机器中的本地 JVM 上运行。Android Gradle 插件会编译应用的源代码,并使用 Gradle 测试任务执行代码。测试是根据修改后的 android.jar 版本执行的,其中所有的最终修饰符都被去掉了。这样,您就可以使用热门的模拟库,例如 Mockito。如需了解详情,请访问 http://tools.android.com/tech-docs/unit-testing-support。
一个很好玩的测验,展示了 Android Material Design。 简介 Material Design 是一种全新的视觉、互动及运动设计系统。Android 版 Topeka 证实了您可以使用相同的品牌规则和 Material Design 原则在各平台上打造一致的体验。我们最初将 Topeka 网络应用当做 Material Design 开放源代码示例发布到了网上。当前的 Topeka 版本适用于使用低至 API 级别 14(即设计支持库发挥着重要作用的 API 级别)的用户。Topeka 还具有一系列可利用 <code>connectedAndroidTest</code> Gradle 任务执行的 Espresso 测试。您可以前往 Android 开发者博客,详细了解此项目。屏幕截图 <img src="screenshots/categories.png" width="30%" /> <img src="screenshots/category_history.png" width="30%" /> <img src="screenshots/quiz_shakespeare.png" width="30%" /> 使用入门 克隆此代码库,进入顶级目录并运行 <code>./gradlew tasks</code>,即可大致了解此项目的所有可用任务。部分重要任务包括: <code> bundleDebug - Assembles all Debug builds. installDebug - Installs the Debug build. connectedAndroidTest - Installs and runs the tests for Debug build on connected devices. test - Run all unit tests. </code> 支持 <li>Stack Overflow:http://stackoverflow.com/questions/tagged/android</li> 如果您在此示例中发现了错误,请提交问题: https://github.com/googlesamples/android-topeka/issues 欢迎提供补丁程序,提交补丁程序的方法是为此项目创建分支,并通过 GitHub 提交拉取请求。 许可 ```版权所有 2015 Google, Inc. 已根据一项或多项贡献者许可协议授予 Apache 软件基金会 (ASF) 使用许可。有关版权所有权的详细信息,请参阅随本作品分发的 NOTICE 文件。ASF 根据 Apache 许可 2.0 版(以下简称“许可”)授予您该文件的使用许可;您只有在遵循此许可的情况下才能使用该文件。您可以通过以下网址获得许可文件的副本: http://www.apache.org/licenses/LICENSE-2.0 除非适用法律规定或达成书面协议,否则按照本许可分发的软件均“按原样”分发,不提供任何类型的担保或条件(无论明示或隐含)。有关本许可下特定的语言管辖权限和限制,请参阅本许可。```
Android 4.4 中新增了“沉浸模式”;该模式可改进“隐藏全屏”模式和“隐藏导航栏”模式(通过让用户向里和向外滑动导航栏来实现)。在此示例中,用户可以查看沉浸模式如何与有关全屏应用的一些其他界面标记进行交互,从而体验沉浸模式。
此示例演示了如何使用沉浸模式为全屏应用隐藏系统栏和导航栏。
这是一个基本应用,展示了如何使用 ViewOutlineProvider 接口裁剪视图,以供视图构建轮廓,用于设置阴影和进行裁剪。
此示例演示了在 Android 上支持深色模式的不同方式。它使用 Material Design 组件库。
此示例包含两个独立的 Android 应用:DragSource 和 DropTarget。DragSource 包含可以拖放到 DropTarget 应用中的图片和文本。图片通过 URI 在这两个应用之间共享,接收方应用必须先请求相应的权限,然后才能使用它。此示例还演示了如何使用 v13 支持库中的 DragStartHelper 轻松处理拖放事件。
此示例演示了使用 <code>setTranslationZ()</code> 在 z 轴方向上移动视图的方式。此方法是在 API 级别 21 (Lollipop) 中引入的。
此示例演示了如何对不同形状执行拖放操作。它使用标高和 z 轴方向平移呈现阴影,并使用不同的轮廓剪裁视图。
“沉浸模式”是 KitKat 中引入的功能之一。借助沉浸模式,用户可以通过滑动来显示/隐藏状态栏和导航栏。如需试用,请点击“切换沉浸模式”按钮,然后尝试向里和向外滑动状态栏/导航栏。
此示例展示了如何将链接添加到 TextView。您可以通过设置“autoLink”属性自动完成此操作,也可以显式地完成此操作。
此示例展示了如何在文本上绘制<strong>圆</strong>角背景。它支持下面几种情况: <li>在<strong>一行</strong>文本上设置背景</li> <img src="../TextRoundedBackgroundKotlin/screenshots/single.png" width="30%" /> <li>在<strong>两行或多行</strong>文本上设置背景</li> <img src="../TextRoundedBackgroundKotlin/screenshots/multi.png" width="30%" /> <li>在<strong>从右到左</strong>的文本上设置背景</li> <img src="../TextRoundedBackgroundKotlin/screenshots/rtl.png" width="30%" />
此示例展示了如何使用 span(采用 Java)在 Android 上设置文本样式。
此示例展示了如何借助 Android KTX 使用 span(采用 Kotlin)在 Android 上设置文本样式。
此应用展示了平台中的各种插值器实现如何工作。您可以改变动画的时长以及任何变量插值器的构造函数参数,并使用界面中的值告知如何编写使用该插值器的代码。对动画参数的更改将动态地反映在蓝色曲线中,运行动画将显示动画的实际运用(曲线上以及底部开放区域中的红色圆圈)。如需使用,请执行以下操作:* 从顶部的下拉列表中选择任何内置插值器 * 使用滑块改变动画时长和/或选定插值器的任何变量参数 * 对于二次和三次路径插值器,拖动绿色手柄以放置曲线的控制点 * 点击“运行”按钮以查看动画的实际运用 * 请注意时长的值以及要在动画代码中使用的其他参数的值 <img src="screenshot.png" alt="InterolatorPlayground screenshot" "="" />
此代码库包含一系列布局,展示了 MotionLayout 的各种功能和用法。
此示例演示了如何使用在 Android N 中提供的多窗口模式 API,并介绍了如何利用全新的 intent 标记和 AndroidManifest 属性来定义多窗口模式行为。将示例应用切换到多窗口模式,看看对应用的生命周期和行为有何影响。
此示例演示了如何使用在 Android N 中提供的多窗口模式 API,并介绍了如何利用全新的 intent 标记和 AndroidManifest 属性来定义多窗口模式行为。将示例应用切换到多窗口模式,看看对应用的生命周期和行为有何影响。
此应用展示了如何使用 Android 支持库中的 Transitions API。虽然过渡功能自 KitKat 版本(API 级别 19)以来一直在平台上工作,但之前无法在搭载较低版本的设备上使用过渡功能。现在,您可以改用支持库 API,在低至 Ice Cream Sandwich(API 级别 14)的 Android 版本上运行该功能。请注意,与框架 API 中的过渡功能相比,支持库 API 存在以下限制: <li>支持库 API 专门用于视图过渡,与我们在 KitKat 版本中提供的相同。以后的功能(如 Activity 过渡)依赖于在较低版本中无法支持的平台功能。</li> <li>KitKat 过渡功能允许使用 XML 资源文件定义过渡、场景和过渡图。另一方面,支持库过渡功能仅允许通过代码设置过渡;支持库中没有此类资源文件。</li> 如需使用过渡演示应用,请执行以下操作: <li>点击某个按钮以将整组按钮移至按钮文本中指定的位置。请注意按钮如何以动画形式移动到位(通过调用一次 TransitionManager.beginDelayedTransition())。</li> <li>选中“交错”复选框,以指明过渡是否应以交错方式一个接一个地运行。当发生这种情况时,将一次启动一个按钮,实现方法是创建一个自定义 TransitionSet,让其中的子过渡具有不同的目标视图和 startDelay。</li> <img src="TransitionsOnJbEmulator.png" alt="Transitions screenshot" "="" /> 如需详细了解过渡,请参阅以下资源: <li>支持库版本(针对 Transitions API 使用版本 24.2.0 及更高版本)</li> <li>android.support.transitions 参考文档</li> <li>有关过渡的开发者培训</li>
此基本示例展示了如何使用 SwipeRefreshLayout 向视图添加“下拉刷新”手势,以启用通过在该视图中向下滑动来触发刷新的功能。在此示例中,可刷新的视图是 ListView。
此示例展示了如何使用 SwipeRefreshLayout 向具有多个子级的布局添加“下拉刷新”手势,以启用通过在可见视图中向下滑动来触发刷新的功能。在此示例中,SwipeRefreshLayout 包含一个可滚动的 GridView,以及一个 TextView 空视图。
此示例展示了如何使用视图或 Fragment 作为页面的 ViewPager2、如何执行页面转换,以及如何将 ViewPager2 关联到 TabLayout,并演示了如何处理对底层页面适配器集合的修改。ViewPager2 取代了 ViewPager,它解决了其前身的大部分难点,包括从右到左的布局支持、垂直方向和可修改的 Fragment 集合。示例 <li>带视图的 ViewPager2 - 展示了如何设置视图作为页面的 ViewPager2</li> <li>带 Fragment 的 ViewPager2 - 展示了如何设置 Fragment 作为页面的 ViewPager2</li> <li>带可变集合(视图)的 ViewPager2 - 演示了如何使用视图作为页面的 ViewPager2,以及页面适配器中的变化</li> <li>带可变集合 (Fragment) 的 ViewPager2 - 演示了如何使用 Fragment 作为页面的 ViewPager2,以及页面适配器中的变化</li> <li>带 TabLayout(视图)的 ViewPager2 - 展示了如何设置视图作为页面的 ViewPager2,以及如何将其关联到 TabLayout</li>
此基本示例展示了如何支持适用于原生 Wear 应用的微光模式。
此示例演示了如何利用 WearableListenerService 生成和使用 DataEvent,以及如何高效地使用 DataLayer。
此示例演示了如何为穿戴式设备应用添加无障碍功能支持。
复杂功能测试套件是一系列提供虚拟数据的复杂功能提供程序,可用于测试不同类型的复杂功能在表盘主题上的渲染效果。
此示例展示了如何使用穿戴式设备上的麦克风进行录音,以及如何播放录音或 MP3 文件(前提是穿戴式设备具有内置扬声器)。此示例没有任何配对手机应用,因此您需要直接将其安装在手表上(使用“adb”)。
此示例演示了在 Wear 2.+ 独立应用中检查关联的移动设备是否已安装您的应用以及在您的应用中检查是否已安装 Wear 2.+ 独立应用的最佳做法。
Android Things 门铃示例演示了如何创建“智能”门铃。此示例会捕获用户按按钮的行为、通过相机外设拍摄图像、利用 Google Cloud Vision API 处理图像数据,并将图像、Cloud Vision 注释和元数据上传到 Firebase 数据库以供配套应用查看。
这些是位于 contrib-drivers 代码库中的 Android Things 外设驱动程序的示例。
此示例演示了如何针对来自 Android Things 应用的音频使用 Android Bluetooth API。
此应用演示了如何从 Android Things 应用中访问 <code>BluetoothGattServer</code> Android API。此示例应用会播发 Time Profile。
此应用演示了如何从 Android Things 应用中访问 <code>BluetoothGattServer</code> Android API。此示例应用会播发 Time Profile。
此 Android Things 示例演示了如何利用按钮输入 UserDriver 监听 GPIO 引脚更改、生成并监听按键事件,以及相应地更改 LED 的状态。请按照外设 I/O Codelab 中关于如何构建类似示例的分步说明操作。
此 Android Things 示例演示了如何利用按钮输入 UserDriver 监听 GPIO 引脚更改、生成并监听按键事件,以及相应地更改 LED 的状态。
此示例展示了如何利用 gRPC 通过 Android Things 调用 Google 助理服务。它会通过已连接的麦克风录制语音请求,并将该请求发送到 Google 助理 API,然后在已连接的音响设备上播放 Google 助理的语音回复。
此示例展示了如何使用 LoWPAN 连接相同网络中的多个 Android Things 设备并无线传输数据。此示例包含 3 个模块,分别演示了如何扫描网络、传输数据以及接收数据。如需详细了解 LoWPAN 网络,请参阅 LoWPAN API 指南。
此 Android Things 应用运行通过 C++ 执行原生 PIO API 的基本代码。每个示例都是可独立运行的 Android 模块。
此 Android Things 应用运行执行外设 I/O API 的基本代码。每个示例都是可独立运行的 Android 模块。
此 Android Things 应用运行执行外设 I/O API 的基本代码。每个示例都是可独立运行的 Android 模块。
此实用程序会将 Android Things 设备的 GPIO 公开为图形界面中的切换微件。您可以查看输入状态,然后点击开关以控制输出状态。
此实用程序会将 Android Things 设备的 GPIO 公开为图形界面中的切换微件。您可以查看输入状态,然后点击开关以控制输出状态。
此示例演示了如何在 Android Things 上运行 TensorFlow Lite 推断。按下按钮即可使用相机拍摄图像,并且 TensorFlow Lite 会告诉您拍摄的是什么!请按照关于如何构建类似示例的图像分类器 Codelab 分步说明操作。
此示例演示了通过 UART 进行的基本数据读取和写入操作。该应用会创建一个环回接口,用于将从接收 (RX) 缓冲区读取的所有数据立即传回到传输 (TX) 缓冲区。
此示例演示了通过 UART 进行的基本数据读取和写入操作。该应用会创建一个环回接口,用于将从接收 (RX) 缓冲区读取的所有数据立即传回到传输 (TX) 缓冲区。
此应用演示了如何通过 <code>UpdateManager</code> API 与 Android Things 上的设备更新服务进行交互。默认情况下,系统每隔几个小时就会检查一次是否有新的 OTA 更新,并自动应用更新。此示例展示了如何配置更新政策,使应用能更好地控制更新流程并监控进度情况。
此应用演示了如何从 Android Things 应用中访问 <code>UsbManager</code> Android API。此示例应用会遍历主机发现的所有 USB 设备,并输出接口和端点信息。
此应用演示了如何从 Android Things 应用中访问 <code>UsbManager</code> Android API。此示例应用会遍历主机发现的所有 USB 设备,并输出接口和端点信息。
此示例展示了如何在 Android Things 上实现传感器中枢,以从连接的传感器收集传感器数据,并作为遥测事件发布到 Google Cloud IoT Core。
此示例将多个 Android Things 外设驱动程序集成在一起,以构建互连气象站。
此示例已弃用/已归档,这意味着,它是只读的,不再积极维护(您可以在此处找到有关归档的更多详情)。对于其他相关示例,请查看新的 github.com/android/testing-samples 代码库。谢谢!
这是一个基本应用,展示了如何使用应用使用情况统计信息 API,让用户收集与应用使用情况相关的统计信息。
这是 Android 版 Material Design 组件目录,旨在演示 Material Design 原则,并提供组件演示和代码示例。