![แผนที่บนอุปกรณ์ที่สวมใส่ได้](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/android-sdk/images/android-wear.png?authuser=0000&hl=th)
คุณสามารถใช้ Maps SDK สำหรับ Android เพื่อสร้างแอปอุปกรณ์ที่สวมใส่ได้ที่ใช้แผนที่ ที่ทำงานโดยตรงในอุปกรณ์ Wear OS by Google ผู้ใช้แอปของคุณ สามารถดูตำแหน่งของพวกเขาบนแผนที่ เพียงมองที่ข้อมือ สิ่งที่ทำได้ วางตำแหน่งภาพบนเส้นทาง เช่น แล้วซูมเข้าเพื่อดูรายละเอียด หรือแตะ เครื่องหมายเพื่อดูหน้าต่างข้อมูลที่แอปของคุณจัดเตรียมไว้
หน้านี้อธิบายฟังก์ชันการทำงานของ API ที่พร้อมใช้งานในอุปกรณ์ Wear และ จะช่วยคุณเริ่มต้นสร้างแอป
เริ่มต้นใช้งาน Wear OS
โดยพื้นฐานแล้ว การสร้างแอปสำหรับอุปกรณ์สวมใส่ด้วย Maps SDK สำหรับ Android เช่นเดียวกับการสร้างแอป Google แผนที่สำหรับอุปกรณ์ Android อื่นๆ ความแตกต่าง อยู่ในการออกแบบสำหรับอุปกรณ์ที่สวมใส่ได้ ซึ่งมีขนาดเล็กกว่าเพื่อ เพิ่มความสามารถในการใช้งานและประสิทธิภาพของแอป
Android Studio เป็นเครื่องมือที่แนะนำสำหรับการพัฒนา Wear OS เนื่องจากมีการจัดตั้งโครงการ รวมห้องสมุด และอำนวยความสะดวกในการบรรจุหีบห่อ
สำหรับความช่วยเหลือทั่วไปเกี่ยวกับการออกแบบแอปสำหรับอุปกรณ์สวมใส่ โปรดดู หลักเกณฑ์การออกแบบของ Wear OS สำหรับความช่วยเหลือในการสร้าง แอปแรกที่สวมใส่ได้ ให้ดูคำแนะนำในการสร้างแอปสำหรับอุปกรณ์ที่สวมใส่ได้
การสร้างแอปแผนที่แอปแรกของคุณบน Wear OS
คู่มือฉบับย่อนี้จะถือว่าคุณคุ้นเคยกับ Maps SDK สำหรับ Android ว่าคุณได้ทำตามคำแนะนำของ Wear OS เพื่อสร้างโมดูลที่สวมใส่ได้ใน แอปของคุณ และตอนนี้คุณต้องการเพิ่มแผนที่ไปยังโมดูลอุปกรณ์ที่สวมใส่ได้
การเพิ่มทรัพยากร Dependency สำหรับโมดูล Wear
ตรวจสอบว่าทรัพยากร Dependency ต่อไปนี้รวมอยู่ในไฟล์ build.gradle.kts
แล้ว
ของโมดูล Wear OS ของแอป
dependencies { // ... compileOnly("com.google.android.wearable:wearable:2.9.0") implementation("com.google.android.support:wearable:2.9.0") implementation("com.google.android.gms:play-services-maps:19.0.0") // This dependency is necessary for ambient mode implementation("androidx.wear:wear:1.3.0") }
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency โปรดดูคำแนะนำในการเพิ่ม โมดูล Wear OS ในโปรเจ็กต์ที่มีอยู่
การใช้ท่าทางสัมผัสการปัดเพื่อปิดและตั้งค่าสีพื้นหลังเริ่มต้น
เราขอแนะนำให้คุณใช้ SwipeDismissFrameLayout
เพื่อแสดงแผนที่ใน
อุปกรณ์ที่สวมใส่ได้ เมื่อใช้ชั้นเรียน SwipeDismissFrameLayout
คุณจะทำสิ่งต่อไปนี้ได้
ใช้ท่าทางสัมผัสปัดเพื่อปิดเพื่อให้ผู้ใช้
ในการออกจากแอป โดยการปัดจากขอบด้านซ้ายสุดของหน้าจอ
หากต้องการตั้งค่าสีพื้นหลังเริ่มต้นที่กำหนดเอง ให้ใช้ XML ของ map:backgroundColor
เพื่อกำหนดสีที่จะแสดงจนกว่าชิ้นส่วนแผนที่จริงจะโหลดขึ้น
เพิ่มองค์ประกอบ SwipeDismissFrameLayout
และ backgroundColor
ลงในเลย์เอาต์
เป็นคอนเทนเนอร์ของ SupportMapFragment
<androidx.wear.widget.SwipeDismissFrameLayout android:id="@+id/map_container" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" map:backgroundColor="#fff0b2dd" /> </androidx.wear.widget.SwipeDismissFrameLayout>
เมื่อได้รับออบเจ็กต์ SwipeDismissFrameLayout
ในกิจกรรมแล้ว ให้เพิ่ม
Callback และกำหนดลักษณะการทำงานของ Callback เพื่อดำเนินการปิดที่จำเป็น
ตามที่แสดงด้านล่าง
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(MainActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. val mapFrameLayout = findViewById<SwipeDismissFrameLayout>(R.id.map_container) mapFrameLayout.addCallback(object : SwipeDismissFrameLayout.Callback() { override fun onDismissed(layout: SwipeDismissFrameLayout) { onBackPressed() } }) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this) } // ... }
Java
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(MainActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. final SwipeDismissFrameLayout mapFrameLayout = (SwipeDismissFrameLayout) findViewById( R.id.map_container); mapFrameLayout.addCallback(new SwipeDismissFrameLayout.Callback() { @Override public void onDismissed(SwipeDismissFrameLayout layout) { onBackPressed(); } }); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // ... }
การเพิ่มแผนที่
ให้ใช้เมธอด Callback onMapReady(GoogleMap)
ตามปกติ
เพื่อรับแฮนเดิลของออบเจ็กต์ GoogleMap การติดต่อกลับคือ
ทริกเกอร์เมื่อแผนที่พร้อมใช้งาน ในเมธอด Callback คุณสามารถ
เพิ่มเครื่องหมายหรือเส้นประกอบลงในแผนที่ เพิ่มผู้ฟัง หรือเลื่อนกล้อง
ตัวอย่างด้านล่างได้เพิ่มเครื่องหมายไว้ใกล้โรงอุปรากรซิดนีย์:
Kotlin
private val sydney = LatLng(-33.85704, 151.21522) override fun onMapReady(googleMap: GoogleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker( MarkerOptions().position(sydney) .title("Sydney Opera House") ) // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10f)) }
Java
private static final LatLng SYDNEY = new LatLng(-33.85704, 151.21522); @Override public void onMapReady(@NonNull GoogleMap googleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker(new MarkerOptions().position(SYDNEY) .title("Sydney Opera House")); // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10)); }
กำลังเปิดใช้โหมดแอมเบียนท์
Maps SDK สำหรับ Android สนับสนุนโหมดแอมเบียนท์สำหรับอุปกรณ์ที่สวมใส่ได้ แอป บางครั้งระบบจะเรียกแอปที่รองรับโหมดแอมเบียนท์ว่าเปิดตลอดเวลา ระบบจะเปิดใช้งานโหมดแอมเบียนท์เมื่อผู้ใช้ไม่ได้ใช้งานแอปอยู่ในขณะนั้น และอนุญาตให้แอปยังคงมองเห็นได้บนอุปกรณ์ที่สวมใส่ได้
Maps SDK สำหรับ Android มอบการแสดงผลสีต่ำที่เรียบง่าย ของแผนที่เพื่อการใช้งานในโหมดแอมเบียนท์ และรูปแบบแผนที่จะปรับตาม อุปกรณ์เปลี่ยนจากโหมดอินเทอร์แอกทีฟเป็นโหมดแอมเบียนท์ เครื่องหมาย วัตถุ และ UI ทั้งหมด ตัวควบคุมจะหายไปในโหมดแอมเบียนท์ ซึ่งช่วยลดการใช้พลังงานของ และดูแลให้แอป แอมเบียนท์ อื่นๆ มีรูปลักษณ์ที่สอดคล้องกัน เช่น หน้าปัด
ทำตามขั้นตอนต่อไปนี้เพื่อให้แอปใช้โหมดแอมเบียนท์ของแผนที่
- อัปเดต Android SDK ให้มี Android 6.0 (API 23) ขึ้นไป แพลตฟอร์ม ซึ่งมี API ที่ช่วยให้กิจกรรมต่างๆ เข้าสู่สภาพแวดล้อม สำหรับข้อมูลเกี่ยวกับวิธีอัปเดต SDK โปรดดูเอกสารประกอบของ Android เกี่ยวกับการเพิ่มแพ็กเกจ SDK
- ตรวจสอบว่าโปรเจ็กต์กำหนดเป้าหมายเป็น Android 6.0 ขึ้นไปโดยการตั้งค่า
targetSdkVersion
ถึง 23 ขึ้นไปในไฟล์ Manifest ของแอป - เพิ่มทรัพยากร Dependency ที่สวมใส่ได้ลงในไฟล์
build.gradle.kts
ของแอป โปรดดู ตัวอย่างในหน้านี้ - เพิ่มรายการไลบรารีที่ใช้ร่วมกันของอุปกรณ์สวมใส่ลงในไฟล์ Manifest ของแอปอุปกรณ์ที่สวมใส่ได้ในฐานะ ตามที่อธิบายไว้ในคลาสการฝึกอบรม Android เกี่ยวกับ การทำให้แอปปรากฏขึ้นเสมอ
- เพิ่มสิทธิ์
WAKE_LOCK
ไปยังไฟล์ Manifest ของแอปแบบพกพาและอุปกรณ์ที่สวมใส่ได้ ตามที่อธิบายไว้ใน คลาสการฝึกอบรมของ Android ใน การทำให้แอปมองเห็นได้อยู่เสมอ - ในเมธอด
onCreate()
ของกิจกรรม ให้เรียกเมธอดAmbientModeSupport.attach()
ซึ่งจะบอก ที่เปิดแอปพลิเคชันอยู่เสมอ เพื่อให้เวลาที่อุปกรณ์ เครื่องจะเข้าสู่โหมดแอมเบียนท์แทนที่จะกลับไปที่นาฬิกา ใบหน้า - ใช้อินเทอร์เฟซ
AmbientModeSupport.AmbientCallbackProvider
ใน กิจกรรมเพื่อให้รับการเปลี่ยนแปลงสถานะโหมดแอมเบียนท์ได้ - ตั้งค่าแผนที่ให้สนับสนุนโหมดแอมเบียนท์ คุณสามารถทำได้โดยการตั้งค่า
แอตทริบิวต์
map:ambientEnabled="true"
ในไฟล์เลย์เอาต์ XML ของกิจกรรม หรือ โดยใช้โปรแกรมโดยการตั้งค่าGoogleMapOptions.ambientEnabled(true)
การตั้งค่านี้จะแจ้งให้ API ทราบว่าต้องโหลดชิ้นส่วนแผนที่ที่จำเป็นไว้ล่วงหน้า ใช้ในโหมดแอมเบียนท์ - เมื่อกิจกรรมเปลี่ยนเป็นโหมดแอมเบียนท์ ระบบจะเรียกใช้ฟังก์ชัน
onEnterAmbient()
ในAmbientCallback
คุณ ให้ไว้ ลบล้างonEnterAmbient()
และโทรSupportMapFragment.onEnterAmbient(ambientDetails)
หรือMapView.onEnterAmbient(ambientDetails)
API จะสลับเป็น การแสดงผลแผนที่แบบไม่โต้ตอบและสีต่ำ - ในทำนองเดียวกัน ในการเรียกใช้
onExitAmbient()
SupportMapFragment.onExitAmbient()
หรือMapView.onExitAmbient()
API เปลี่ยนเป็นการแสดงผลปกติของแผนที่
ตัวอย่างโค้ดต่อไปนี้จะเปิดใช้โหมดแอมเบียนท์ในกิจกรรม
Kotlin
class AmbientActivity : AppCompatActivity(), AmbientModeSupport.AmbientCallbackProvider { private lateinit var mapFragment: SupportMapFragment public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(AmbientActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment } override fun getAmbientCallback(): AmbientModeSupport.AmbientCallback { return object : AmbientModeSupport.AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ override fun onEnterAmbient(ambientDetails: Bundle) { super.onEnterAmbient(ambientDetails) mapFragment.onEnterAmbient(ambientDetails) } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ override fun onExitAmbient() { super.onExitAmbient() mapFragment.onExitAmbient() } } } }
Java
public class AmbientActivity extends AppCompatActivity implements AmbientModeSupport.AmbientCallbackProvider { private SupportMapFragment mapFragment; public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(AmbientActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); } @Override public AmbientCallback getAmbientCallback() { return new AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ @Override public void onEnterAmbient(Bundle ambientDetails) { super.onEnterAmbient(ambientDetails); mapFragment.onEnterAmbient(ambientDetails); } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ @Override public void onExitAmbient() { super.onExitAmbient(); mapFragment.onExitAmbient(); } }; } }
คุณอัปเดตหน้าจอขณะที่แอปอยู่ในโหมดแอมเบียนท์ได้ สำหรับรายละเอียดเพิ่มเติม เกี่ยวกับการอัปเดตเนื้อหาและโหมดแอมเบียนท์โดยทั่วไป โปรดดู การฝึกอบรมเกี่ยวกับการทำให้แอปของคุณมองเห็นได้
การใช้ Street View บน Wear OS
Street View ได้รับการสนับสนุนอย่างสมบูรณ์บนอุปกรณ์ที่สวมใส่ได้
หากต้องการอนุญาตให้ผู้ใช้ออกจากแอปเมื่อดูภาพพาโนรามาของ Street View ให้ใช้
StreetViewPanorama.OnStreetViewPanoramaLongClickListener
เพื่อฟังท่าทางสัมผัสแบบคลิกยาว เมื่อผู้ใช้คลิกที่ใดที่หนึ่งค้างไว้
ในรูปภาพ Street View คุณจะได้รับ
onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
เหตุการณ์ โทร
DismissOverlayView.show()
เพื่อแสดงปุ่มออก
โค้ดตัวอย่าง
ดูตัวอย่างแอปได้ใน GitHub ซึ่งคุณสามารถใช้เป็น จุดเริ่มต้นของแอปคุณ ตัวอย่างนี้แสดงวิธีตั้งค่า Google Maps พื้นฐานบน Wear OS
ฟังก์ชันที่รองรับใน Maps API บน Wear OS
ส่วนนี้จะอธิบายข้อแตกต่างของฟังก์ชันที่รองรับสำหรับแผนที่ใน อุปกรณ์ที่สวมใส่ได้เมื่อเทียบกับอุปกรณ์มือถือ (โทรศัพท์และแท็บเล็ต) ฟีเจอร์ทั้งหมดของ API ที่ไม่ได้กล่าวถึงด้านล่างควรทำงานตามที่ระบุไว้ในเอกสารสำหรับ API ฉบับเต็ม
ฟังก์ชันการทำงาน | |
---|---|
โหมดอินเทอร์แอกทีฟอย่างเต็มรูปแบบและโหมด Lite | คุณสามารถใช้ Maps SDK สำหรับ Android ในโหมดอินเทอร์แอกทีฟโดยสมบูรณ์หรือ ในโหมด Lite ลองใช้โหมด Lite หากต้องการเพิ่มประสิทธิภาพ อุปกรณ์ที่สวมใส่ได้และแอปของคุณไม่จำเป็นต้องรองรับ การโต้ตอบ เช่น ท่าทางสัมผัส หรือการเลื่อนและการซูมแผนที่ ในโหมดไลท์ ตั้งใจที่จะเปิดแอป Google Maps บนอุปกรณ์เคลื่อนที่เมื่อ ผู้ใช้แตะแผนที่ปิดใช้งาน และไม่สามารถเปิดใช้งาน อุปกรณ์ที่สวมใส่ได้ หากต้องการดูรายการความแตกต่างทั้งหมดระหว่างโหมด Lite และการโต้ตอบเต็มรูปแบบ ให้ดูที่โหมด Lite เอกสารประกอบ |
แถบเครื่องมือแผนที่ | แผนที่ แถบเครื่องมือปิดอยู่ และไม่สามารถเปิดใช้บน อุปกรณ์ที่สวมใส่ได้ |
ตัวควบคุม UI | UI
ตัวควบคุมจะปิดใช้อยู่โดยค่าเริ่มต้นในอุปกรณ์ที่สวมใส่ได้ ซึ่งรวมถึง
การควบคุมการซูม เข็มทิศ และตำแหน่งของฉัน คุณสามารถเปิดใช้งานได้โดยใช้
UiSettings
ตามปกติ
|
ท่าทางสัมผัส | แตะครั้งเดียว ท่าทางสัมผัส ทำงานตามที่คาดไว้ ตัวอย่างเช่น แตะและลากเพื่อเลื่อนแผนที่ แตะสองครั้ง เพื่อซูมเข้า และใช้ 2 นิ้วแตะเพื่อซูมออก การรองรับท่าทางสัมผัสแบบมัลติทัชจะแตกต่างกันไปขึ้นอยู่กับอุปกรณ์ของผู้ใช้ ตัวอย่างของท่าทางสัมผัสแบบมัลติทัช ได้แก่ การใช้ 2 นิ้วดันเพื่อเอียงแผนที่ ให้บีบเพื่อซูม และหมุนด้วย 2 นิ้ว |
แผนที่และอาคารในอาคาร |
แผนที่ในอาคาร
ปิดใช้โดยค่าเริ่มต้นบนอุปกรณ์ที่สวมใส่ได้ คุณสามารถเปิดใช้โดยการโทร
GoogleMap.setIndoorEnabled(true) หากแผนที่ในอาคาร
เปิดใช้งาน แผนที่จะแสดงชั้นเริ่มต้น
ระดับ
เครื่องมือเลือก องค์ประกอบ UI ไม่รองรับในอุปกรณ์ที่สวมใส่ได้ |
การวางซ้อนของชิ้นส่วนแผนที่ | การวางซ้อนของชิ้นส่วนแผนที่ ไม่รองรับในอุปกรณ์ที่สวมใส่ได้ |
แนวทางปฏิบัติแนะนำสำหรับการพัฒนาด้วย Maps API ใน Wear OS
วิธีมอบประสบการณ์การใช้งานที่ดีที่สุดให้แก่ผู้ใช้ในแอป
- แผนที่ควรกินพื้นที่ส่วนใหญ่ของหน้าจอ วิธีนี้จำเป็นต่อ เพิ่มประสิทธิภาพความสามารถในการใช้งานแผนที่ในรูปแบบของอุปกรณ์ที่สวมใส่ได้ซึ่งมีขนาดเล็ก อุปกรณ์
- เมื่อออกแบบประสบการณ์ของผู้ใช้แอป ให้คำนึงถึงข้อเท็จจริง ว่าอุปกรณ์ที่สวมใส่ได้มีพลังงานแบตเตอรี่ต่ำ ให้หน้าจอทำงานอยู่ตลอดเวลาและ แผนที่ที่มองเห็นได้จะส่งผลต่อประสิทธิภาพของแบตเตอรี่