148 lines
7.4 KiB
Markdown
148 lines
7.4 KiB
Markdown
|
|
Android XYZTouristAttractions Sample
|
|
===================================
|
|
|
|
This sample aims to be as close to a real world example of a mobile
|
|
and Wear app combination as possible. It has a more refined design
|
|
and also provides a practical example of how a mobile app would
|
|
interact and communicate with its wear counterpart.
|
|
|
|
The app itself is modeled after a hypothetical tourist attractions
|
|
app that notifies the user when they are in close proximity to
|
|
notable points of interest.
|
|
|
|
The Wear component shows tourist attraction images and summary
|
|
information, and provides quick actions for nearby tourist
|
|
attractions in a [GridViewPager](http://developer.android.com/reference/android/support/wearable/view/GridViewPager.html)
|
|
UI component.
|
|
|
|
Introduction
|
|
------------
|
|
|
|
Steps for trying out this sample:
|
|
* Compile and install the mobile app onto your mobile device or emulator.
|
|
* Compile and install the wearable app onto your Wear device or emulator.
|
|
(**Note:** wearable apps are not automatically pushed from your mobile device
|
|
unless you build a production release, see [here][22] for more info).
|
|
* Start the mobile app and use the overflow menu options to test either a
|
|
notification enhanced for Wear, or the full wearable application (unless
|
|
you're physically in Sydney in which case the geofence should trigger
|
|
automatically). Note that the first time you trigger either the notification
|
|
or the wearable app it may take 20-30 seconds to show up as it needs to
|
|
transfer the image assets to the wearable (in practice this delay won't be
|
|
noticeable to users as they will only be notified once the data has been sent).
|
|
|
|
This sample aims to demonstrate a number of different Android APIs and concepts
|
|
relating to [Android Wear][1] and location using [Google Play Services][2]:
|
|
* Trigger a mobile notification that uses [WearableExtender][3] to customize the
|
|
display on the wearable
|
|
* Transmit data from the mobile app to the wearable (including binary blobs
|
|
such as photos) using the [Wearable DataApi][4]
|
|
* Synchronize notification dismissal across mobile and wearable apps via the
|
|
[Wearable MessageApi][5]
|
|
* Trigger actions on the mobile app via the wearable app (eg. start walking
|
|
navigation) via the [Wearable MessageApi][5]
|
|
* Locate the user via the [Google Location APIs][6] and the
|
|
[FusedLocationProviderApi][7]
|
|
* Set up and trigger location [geofences][8] using the
|
|
[Google Location APIs][6]
|
|
|
|
The sample also focuses on providing a simple, yet clean design and UI for both
|
|
mobile and wearable apps with an extra level of visual polish compared to a
|
|
traditional code sample.
|
|
|
|
Some of the UI widgets and design patterns used in the mobile app include:
|
|
* Use of Material theme including definition of primary and accent colors
|
|
* [AppCompat][9] usage for Material theme backward compatibility
|
|
* Metrics and keylines based on the [Material guidelines][10]
|
|
* Window content and activity transitions based on the
|
|
[Material guidelines][11]
|
|
* Use of the [RecyclerView][12] widget
|
|
* CoordinatorLayout[23] and FloatingActionButton[24] from the Design Support library[25]
|
|
* Material animations such as activity and shared element transitions
|
|
|
|
The wearable app uses a number of techniques and UI widgets as well:
|
|
* Full screen app built off [GridViewPager][13] and [DotsPageIndicator][14]
|
|
* Support for square and round screens (with and without insets) using
|
|
[WatchViewStub][15] and [OnApplyWindowInsetsListener][16]
|
|
* Use of a variety of other widgets from the [Wearable UI Library][17]
|
|
([DismissOverlayView][18], [ConfirmationActivity][19],
|
|
[CardScrollView][20], [CircledImageView][21], [ActionPage][26])
|
|
|
|
[1]: http://developer.android.com/wear/
|
|
[2]: https://developer.android.com/google/play-services/
|
|
[3]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html
|
|
[4]: https://developer.android.com/reference/com/google/android/gms/wearable/DataApi.html
|
|
[5]: https://developer.android.com/reference/com/google/android/gms/wearable/MessageApi.html
|
|
[6]: https://developer.android.com/google/play-services/location.html
|
|
[7]: https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html
|
|
[8]: https://developer.android.com/reference/com/google/android/gms/location/Geofence.html
|
|
[9]: https://developer.android.com/tools/support-library/features.html#v7-appcompat
|
|
[10]: http://www.google.com/design/spec/layout/metrics-keylines.html
|
|
[11]: http://www.google.com/design/spec/animation/meaningful-transitions.html
|
|
[12]: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
|
|
[13]: http://developer.android.com/reference/android/support/wearable/view/GridViewPager.html
|
|
[14]: http://developer.android.com/reference/android/support/wearable/view/DotsPageIndicator.html
|
|
[15]: http://developer.android.com/reference/android/support/wearable/view/WatchViewStub.html
|
|
[16]: http://developer.android.com/reference/android/view/View.OnApplyWindowInsetsListener.html
|
|
[17]: https://developer.android.com/training/wearables/apps/layouts.html#UiLibrary
|
|
[18]: http://developer.android.com/reference/android/support/wearable/view/DismissOverlayView.html
|
|
[19]: http://developer.android.com/reference/android/support/wearable/activity/ConfirmationActivity.html
|
|
[20]: http://developer.android.com/reference/android/support/wearable/view/CardScrollView.html
|
|
[21]: http://developer.android.com/reference/android/support/wearable/view/CircledImageView.html
|
|
[22]: https://developer.android.com/training/wearables/apps/creating.html#Install
|
|
[23]: https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html
|
|
[24]: https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
|
|
[25]: http://android-developers.blogspot.com/2015/05/android-design-support-library.html
|
|
[26]: http://developer.android.com/reference/android/support/wearable/view/ActionPage.html
|
|
|
|
Pre-requisites
|
|
--------------
|
|
|
|
- Android SDK 27
|
|
- Android Build Tools v27.0.2
|
|
- Android Support Repository
|
|
|
|
Screenshots
|
|
-------------
|
|
|
|
<img src="screenshots/composite-1.png" height="400" alt="Screenshot"/>
|
|
|
|
Getting Started
|
|
---------------
|
|
|
|
This sample uses the Gradle build system. To build this project, use the
|
|
"gradlew build" command or use "Import Project" in Android Studio.
|
|
|
|
Support
|
|
-------
|
|
|
|
- Google+ Community: https://plus.google.com/communities/105153134372062985968
|
|
- Stack Overflow: http://stackoverflow.com/questions/tagged/android
|
|
|
|
If you've found an error in this sample, please file an issue:
|
|
https://github.com/googlesamples/android-XYZTouristAttractions
|
|
|
|
Patches are encouraged, and may be submitted by forking this project and
|
|
submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
|
|
|
|
License
|
|
-------
|
|
|
|
Copyright 2017 The Android Open Source Project, Inc.
|
|
|
|
Licensed to the Apache Software Foundation (ASF) under one or more contributor
|
|
license agreements. See the NOTICE file distributed with this work for
|
|
additional information regarding copyright ownership. The ASF licenses this
|
|
file to you under the Apache License, Version 2.0 (the "License"); you may not
|
|
use this file except in compliance with the License. You may obtain a copy of
|
|
the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
License for the specific language governing permissions and limitations under
|
|
the License.
|