
Android के लिए Maps SDK टूल का इस्तेमाल करके, मैप पर आधारित पहने जाने वाला डिवाइस बनाया जा सकता है. यह ऐप्लिकेशन सीधे Wear OS by Google डिवाइसों पर चलता है. आपके ऐप्लिकेशन के उपयोगकर्ता सिर्फ़ अपनी कलाई पर नज़र रखकर मैप पर अपनी जगह की जानकारी देख सकते हैं. उदाहरण के लिए, वे किसी रास्ते पर अपनी स्थिति दिखा सकते हैं, फिर ज़्यादा जानकारी के लिए ज़ूम इन कर सकते हैं या आपके ऐप्लिकेशन से मिली जानकारी वाली विंडो देखने के लिए, किसी मार्कर पर टैप कर सकते हैं.
इस पेज पर, पहने जाने वाले डिवाइस पर उपलब्ध एपीआई की सुविधाओं के बारे में बताया गया है. साथ ही, इससे आपको ऐप्लिकेशन बनाने में मदद मिलेगी.
Wear OS का इस्तेमाल शुरू करना
Android के लिए Maps SDK टूल के साथ, पहने जाने वाला ऐप्लिकेशन बनाना, किसी भी दूसरे Android डिवाइस के लिए Google Maps ऐप्लिकेशन बनाने जैसा ही है. यह फ़र्क़ सिर्फ़ पहने जाने वाले डिवाइस के छोटे डिज़ाइन में होता है, ताकि ऐप्लिकेशन की उपयोगिता और परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सके.
Android Studio, Wear OS डेवलप करने के लिए सुझाया गया टूल है. इससे प्रोजेक्ट सेटअप करने, लाइब्रेरी में शामिल करने, और पैकेजिंग से जुड़ी सुविधाएं मिलती हैं.
पहने जाने वाले डिवाइस के लिए, ऐप्लिकेशन डिज़ाइन करने में सामान्य मदद पाने के लिए, Wear OS डिज़ाइन से जुड़े दिशा-निर्देश देखें. अपना पहला पहने जाने वाले डिवाइस को बनाने में सहायता के लिए, पहने जाने वाले डिवाइस के लिए ऐप बनाने की गाइड देखें.
Wear OS पर अपना पहला Maps ऐप्लिकेशन बनाना
इस गाइड में यह माना गया है कि आपको Android के लिए Maps SDK टूल के बारे में जानकारी है. आपने अपने ऐप्लिकेशन में, पहने जाने वाले डिवाइस के लिए मॉड्यूल बनाने के लिए, Wear OS की गाइड का पालन किया है. अब आपको पहने जाने वाले मॉड्यूल में मैप जोड़ना है.
आपके wear मॉड्यूल के लिए डिपेंडेंसी जोड़ना
पक्का करें कि आपके ऐप्लिकेशन के Wear OS मॉड्यूल की build.gradle
फ़ाइल
में ये डिपेंडेंसी शामिल हों:
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:18.1.0' // This dependency is necessary for ambient mode implementation 'androidx.wear:wear:1.2.0' }
डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, अपने मौजूदा प्रोजेक्ट में Wear OS मॉड्यूल जोड़ने का तरीका लेख पढ़ें.
खारिज करने के लिए स्वाइप करने का जेस्चर लागू करना और बैकग्राउंड का शुरुआती रंग सेट करना
हमारा सुझाव है कि पहने जाने वाले डिवाइस पर मैप दिखाने के लिए, SwipeDismissFrameLayout
का इस्तेमाल करें. SwipeDismissFrameLayout
क्लास का इस्तेमाल करके, स्वाइप-टू-डिमिस जेस्चर को लागू किया जा सकता है. इससे, उपयोगकर्ताओं को ऐप्लिकेशन से बाहर निकलने का तरीका मिल जाता है. इसके लिए, उन्हें स्क्रीन के सबसे बाएं किनारे से स्वाइप करना होता है.
अपनी पसंद के मुताबिक शुरुआती बैकग्राउंड कलर सेट करने के लिए, 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
ऑब्जेक्ट मिलने पर,
कॉलबैक जोड़ें और खारिज करने की ज़रूरी कार्रवाई
करने के लिए कॉलबैक का व्यवहार सेट करें, जैसा कि यहां दिखाया गया है:
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); } // ... }
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) } // ... }
मैप जोड़ा जा रहा है
GoogleMap ऑब्जेक्ट का हैंडल पाने के लिए,
हमेशा की तरह onMapReady(GoogleMap)
कॉलबैक तरीके का इस्तेमाल करें. जब मैप इस्तेमाल करने के लिए तैयार होता है, तब कॉलबैक ट्रिगर होता है. कॉलबैक विधि में, आप मैप पर मार्कर या पॉलीलाइन जोड़ सकते हैं, लिसनर जोड़ सकते हैं या कैमरे को इधर-उधर ले जा सकते हैं. नीचे दिए गए उदाहरण में सिडनी ऑपरा हाउस के पास एक मार्कर जोड़ा गया है:
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)); }
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)) }
आस-पास की आवाज़ सुनाने वाला मोड चालू कर रही हूँ
Android के लिए Maps SDK टूल, पहने जाने वाले ऐप्लिकेशन के लिए ऐंबियंट मोड पर काम करता है. ऐंबियंट मोड पर काम करने वाले ऐप्लिकेशन को, कभी-कभी हमेशा ऐप्लिकेशन पर कॉल किया जाता है. जब उपयोगकर्ता सक्रिय रूप से ऐप्लिकेशन का इस्तेमाल नहीं करता है, तब ऐंबियंट मोड चालू हो जाता है. इससे, पहने जाने वाले डिवाइस पर ऐप्लिकेशन दिखता रहता है.
Android के लिए Maps SDK टूल, ऐंबियंट मोड में इस्तेमाल करने के लिए मैप को आसान और कम रंग में रेंडर करता है. साथ ही, जब डिवाइस इंटरैक्टिव से ऐंबियंट मोड में बदलता है, तो मैप की स्टाइल अपने-आप बदल जाती है. ऐंबियंट मोड में सभी मार्कर, ऑब्जेक्ट, और यूज़र इंटरफ़ेस (यूआई) कंट्रोल गायब हो जाते हैं. इससे आपके ऐप्लिकेशन की बिजली की खपत कम होती है और घड़ी की होम स्क्रीन जैसे ऐंबियंट ऐप्लिकेशन पर एक जैसा अनुभव मिलता है.
यह पक्का करने के लिए कि आपका ऐप्लिकेशन, मैप के ऐंबियंट मोड का इस्तेमाल करता है, नीचे दिया गया तरीका अपनाएं:
- Android 6.0 (एपीआई 23) या इसके बाद के प्लैटफ़ॉर्म को शामिल करने के लिए, अपने Android SDK को अपडेट करें. यह ऐसे एपीआई उपलब्ध कराता है जो गतिविधियों को ऐंबियंट मोड में जाने देते हैं. अपने SDK टूल को अपडेट करने के तरीके के बारे में जानने के लिए, SDK टूल के पैकेज जोड़ने से जुड़ा Android दस्तावेज़ देखें.
- ऐप्लिकेशन मेनिफ़ेस्ट में
targetSdkVersion
को 23 या उसके बाद के वर्शन पर सेट करके, पक्का करें कि आपका प्रोजेक्ट Android 6.0 या इसके बाद के वर्शन को टारगेट करता हो. - अपने ऐप्लिकेशन की
build.gradle
फ़ाइल में, पहने जाने वाले डिवाइस की डिपेंडेंसी जोड़ें. इस पेज पर दिया गया सैंपल देखें. - अपने ऐप्लिकेशन को बेहतर बनाए रखने के लिए, Android ट्रेनिंग क्लास में बताए गए तरीके के मुताबिक, पहने जाने वाले ऐप्लिकेशन के मेनिफ़ेस्ट में, पहने जाने वाले डिवाइस के लिए शेयर की गई लाइब्रेरी में जानकारी जोड़ें.
- अपने ऐप्लिकेशन को बेहतर बनाए रखने के लिए, Android ट्रेनिंग क्लास में बताए गए तरीके के मुताबिक, हैंडहेल्ड और पहने जाने वाले ऐप्लिकेशन के मेनिफ़ेस्ट में
WAKE_LOCK
की अनुमति जोड़ें. - अपनी गतिविधि के
onCreate()
तरीके में,AmbientModeSupport.attach()
वाले तरीके को कॉल करें. इससे ऑपरेटिंग सिस्टम को पता चलता है कि ऐप्लिकेशन हमेशा चालू रहता है, ताकि डिवाइस के बंद होने पर यह स्मार्ट वॉच की होम स्क्रीन पर लौटने के बजाय ऐंबियंट मोड में चला जाए. - अपनी गतिविधि में
AmbientModeSupport.AmbientCallbackProvider
इंटरफ़ेस लागू करें, ताकि उसे ऐंबियंट मोड की स्थिति में बदलाव मिल सकें. - अपने मैप को ऐंबियंट मोड पर सेट करें. गतिविधि की एक्सएमएल लेआउट फ़ाइल में
map:ambientEnabled="true"
एट्रिब्यूट को सेट करके ऐसा किया जा सकता है याGoogleMapOptions.ambientEnabled(true)
को किसी प्रोग्राम के ज़रिए सेट करके ऐसा किया जा सकता है. यह सेटिंग एपीआई को बताती है कि उसे ऐंबियंट मोड में इस्तेमाल करने के लिए, ज़रूरी मैप टाइल को पहले से लोड करना होगा. - गतिविधि के ऐंबियंट मोड में स्विच होने पर, सिस्टम आपके दिए गए
AmbientCallback
में मौजूदonEnterAmbient()
तरीके को कॉल करता है.onEnterAmbient()
को बदलें औरSupportMapFragment.onEnterAmbient(ambientDetails)
याMapView.onEnterAmbient(ambientDetails)
को कॉल करें. एपीआई, मैप की नॉन-इंटरैक्टिव और कम रंग वाली रेंडरिंग में बदल जाता है. - इसी तरह,
onExitAmbient()
मेंSupportMapFragment.onExitAmbient()
याMapView.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(); } }; } }
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() } } } }
ऐप्लिकेशन को ऐंबियंट मोड में इस्तेमाल करने पर, स्क्रीन को अपडेट किया जा सकता है. कॉन्टेंट अपडेट करने और ऐंबियंट मोड के बारे में ज़्यादा जानकारी पाने के लिए, अपने ऐप्लिकेशन को दिखने वाला बनाए रखना Android ट्रेनिंग क्लास देखें.
Wear OS पर Street View का इस्तेमाल करना
Street View, पहने जाने वाले डिवाइसों पर पूरी तरह काम करता है.
Street View पैनोरामा देखते समय, उपयोगकर्ताओं को ऐप्लिकेशन से बाहर निकलने की अनुमति देने के लिए,
StreetViewPanorama.OnStreetViewPanoramaLongक्लिकल
इंटरफ़ेस का इस्तेमाल करके, लंबे क्लिक के जेस्चर को सुनें. जब कोई उपयोगकर्ता, Street View की इमेज पर कहीं भी क्लिक करता है, तो आपको एक onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
इवेंट मिलेगा. बाहर निकलने का बटन दिखाने के लिए
DismissOverlayView.show()
को कॉल करें.
नमूना कोड
GitHub पर एक सैंपल ऐप्लिकेशन उपलब्ध है, जिसका इस्तेमाल आप अपने ऐप्लिकेशन के शुरुआती पॉइंट के तौर पर कर सकते हैं. इस नमूने में, Wear OS पर बुनियादी Google मैप सेट अप करने का तरीका बताया गया है.
Wear OS पर Maps API में काम करने वाली सुविधाएं
यह सेक्शन, पहने जाने वाले डिवाइसों (फ़ोन और टैबलेट) की तुलना में पहने जाने वाले डिवाइसों के लिए, मैप पर काम करने वाली सुविधाओं के बीच के अंतर के बारे में बताता है. नीचे बताई नहीं गई एपीआई की सभी सुविधाएं, पूरे एपीआई के दस्तावेज़ों के तौर पर काम करनी चाहिए.
फ़ंक्शन | |
---|---|
पूरी तरह से इंटरैक्टिव मोड और लाइट मोड | Android के लिए Maps SDK टूल को पूरी तरह से इंटरैक्टिव मोड या लाइट मोड में इस्तेमाल किया जा सकता है. अगर आपको पहने जाने वाले डिवाइस पर परफ़ॉर्मेंस ऑप्टिमाइज़ करनी है और आपके ऐप्लिकेशन को हाथ के जेस्चर (हाव-भाव) या मैप को पैन और ज़ूम करने जैसे इंटरैक्शन की ज़रूरत नहीं पड़ती है, तो लाइट मोड का इस्तेमाल करें. लाइट मोड में, जब उपयोगकर्ता मैप पर टैप करता है, तब Google Maps मोबाइल ऐप्लिकेशन बंद हो जाता है और पहने जाने वाले डिवाइस पर उसे चालू नहीं किया जा सकता. लाइट मोड और पूरी तरह इंटरैक्टिव मोड के बीच के अंतर की पूरी सूची देखने के लिए, लाइट मोड का दस्तावेज़ देखें. |
मैप टूलबार | मैप टूलबार बंद है और पहने जाने वाले डिवाइस पर इसे चालू नहीं किया जा सकता. |
यूज़र इंटरफ़ेस (यूआई) कंट्रोल | पहने जाने वाले डिवाइसों पर, यूज़र इंटरफ़ेस (यूआई)
कंट्रोल डिफ़ॉल्ट रूप से बंद होते हैं. इसमें ज़ूम, कंपास, और मेरी जगह की जानकारी के कंट्रोल शामिल हैं. इन्हें हमेशा की तरह
UiSettings
क्लास का इस्तेमाल करके चालू किया जा सकता है.
|
हाथ के जेस्चर | सिंगल-टच जेस्चर उम्मीद के मुताबिक काम करते हैं. उदाहरण के लिए, मैप को पैन करने के लिए दबाकर खींचें और छोड़ें, ज़ूम इन करने के लिए दो बार टैप करें, और ज़ूम आउट करने के लिए दो उंगलियों से टैप करें. उपयोगकर्ता के डिवाइस के आधार पर, मल्टी-टच जेस्चर के लिए अलग-अलग सुविधाएं मिलती हैं. मल्टी-टच जेस्चर के उदाहरणों में, मैप को झुकाने के लिए दो उंगलियों से पुश करना, ज़ूम करने के लिए पिंच करना, और दो उंगलियों से घुमाना शामिल है. |
इनडोर मैप और इमारतें |
पहने जाने वाले डिवाइस पर इनडोर मैप,
डिफ़ॉल्ट रूप से बंद रहते हैं. इन्हें चालू करने के लिए,
GoogleMap.setIndoorEnabled(true) पर कॉल करें. अगर इनडोर मैप
चालू हैं, तो मैप में डिफ़ॉल्ट फ़्लोर लेवल दिखेगा.
लेवल पिकर यूज़र इंटरफ़ेस (यूआई) एलिमेंट, पहने जाने वाले डिवाइसों पर काम नहीं करता. |
टाइल ऊपर लगाएं | टाइल ओवरले, पहने जाने वाले डिवाइसों पर काम नहीं करते. |
Wear OS पर Maps API के साथ डेवलप करने के सबसे सही तरीके
अपने ऐप्लिकेशन में बेहतरीन उपयोगकर्ता अनुभव देने का तरीका:
- मैप को स्क्रीन का बड़ा हिस्सा कवर करना चाहिए. यह ज़रूरी है कि पहने जाने वाले डिवाइस के छोटे नाप या आकार पर, मैप की उपयोगिता को ऑप्टिमाइज़ किया जा सके.
- अपने ऐप्लिकेशन का उपयोगकर्ता अनुभव डिज़ाइन करते समय, इस बात का ध्यान रखें कि पहने जाने वाले डिवाइस की बैटरी कम है. स्क्रीन को चालू रखने और मैप को दिखाई देने से बैटरी की परफ़ॉर्मेंस पर असर पड़ेगा.