Wear OS पर Maps API

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
पहने जाने वाले डिवाइस पर मैप

Android के लिए Maps SDK टूल का इस्तेमाल करके, आप मैप पर आधारित काम करने वाला ऐप्लिकेशन बना सकते हैं. यह ऐप्लिकेशन, सीधे Wear OS by Google डिवाइसों पर काम करता है. आपके ऐप्लिकेशन के उपयोगकर्ता बस अपनी कलाई पर नज़र डालकर मैप पर अपनी जगह देख सकते हैं. उदाहरण के लिए, वे रास्ते पर अपनी जगह दिखा सकते हैं, ज़्यादा जानकारी के लिए ज़ूम इन कर सकते हैं या अपने ऐप्लिकेशन की दी गई जानकारी विंडो देखने के लिए मार्कर पर टैप कर सकते हैं.

यह पेज, Wear डिवाइस पर उपलब्ध एपीआई के फ़ंक्शन के बारे में बताता है. इससे, आपको ऐप्लिकेशन बनाने में मदद मिलेगी.

Wear OS का इस्तेमाल शुरू करना

Android के लिए Maps SDK टूल की मदद से पहने जाने वाला ऐप्लिकेशन बनाना, बुनियादी तौर पर किसी दूसरे Android डिवाइस के लिए Google Maps ऐप्लिकेशन बनाने जैसा ही है. ये अंतर आपके पहने जाने वाले डिवाइस के छोटे आकार वाले फ़ैक्टर के हिसाब से होंगे, ताकि ऐप्लिकेशन के इस्तेमाल और इस्तेमाल को बेहतर बनाया जा सके.

Wear OS के डेवलपमेंट के लिए, Android Studio एक सुझाया गया टूल है. इससे, प्रोजेक्ट सेट अप करने, लाइब्रेरी शामिल करने, और पैकेजिंग की सुविधाएं मिलती हैं.

पहने जाने वाले ऐप्लिकेशन डिज़ाइन करने में सामान्य मदद पाने के लिए, Wear OS डिज़ाइन से जुड़े दिशा-निर्देश देखें. अपना पहला पहने जाने वाला ऐप्लिकेशन बनाने में मदद के लिए, पहने जाने वाले ऐप्लिकेशन बनाने में मदद के लिए गाइड देखें.

Wear OS पर Maps का अपना पहला ऐप्लिकेशन बनाना

इस गाइड में बताया गया है कि आपको Android के लिए Maps SDK टूल के बारे में कितनी जानकारी है. साथ ही, यह भी बताया गया है कि आपने अपने ऐप्लिकेशन में पहने जाने वाले डिवाइस बनाने के लिए, Wear OS गाइड को फ़ॉलो किया है या नहीं, और अब आप पहने जाने वाले मॉड्यूल में एक मैप जोड़ना चाहते हैं.

कपड़ों के मॉड्यूल के लिए डिपेंडेंसी जोड़ना

पक्का करें कि ये डिपेंडेंसी आपके ऐप्लिकेशन के 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)
    }

    // ...
}

      

मैप जोड़ना

हमेशा की तरह onMapReady(GoogleMap) कॉलबैक विधि का उपयोग करके, 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 टूल, मैप की एक आसान और कम कलर रेंडरिंग देता है, जिसका इस्तेमाल ऐंबियंट मोड में किया जाता है. साथ ही, जब डिवाइस, इंटरैक्टिव से ऐंबियंट मोड पर स्विच होता है, तब मैप स्टाइल अपने-आप अडजस्ट हो जाती है. सभी मार्कर, ऑब्जेक्ट, और यूज़र इंटरफ़ेस (यूआई) कंट्रोल, ऐंबियंट मोड में बंद हो जाते हैं. इससे, आपके ऐप्लिकेशन की पावर कम खर्च होती है. साथ ही, यह पक्का होता है कि 'स्मार्ट वॉच की होम स्क्रीन' जैसे आस-पास के दूसरे ऐप्लिकेशन जैसा दिखे और रंग-रूप के नतीजे मिलें.

यह पक्का करने के लिए कि आपका ऐप्लिकेशन मैप के आस-पास की आवाज़ सुनाने वाला मोड का इस्तेमाल करता है, नीचे दिए गए तरीकों को अपनाएं:

  1. Android 6.0 (एपीआई 23) या उसके बाद के वर्शन को शामिल करने के लिए, अपने Android SDK टूल को अपडेट करें. इसकी मदद से, एपीआई की मदद से गतिविधियों को ऐंबियंट मोड में किया जा सकता है. अपने SDK टूल को अपडेट करने के बारे में जानने के लिए, SDK टूल के पैकेज जोड़ने के बारे में Android दस्तावेज़ देखें.
  2. पक्का करें कि आपका प्रोजेक्ट, Android 6.0 या इसके बाद के वर्शन को टारगेट करता है. इसके लिए, ऐप्लिकेशन मेनिफ़ेस्ट में targetSdkVersion को 23 या उससे ज़्यादा पर सेट करें.
  3. पहने जाने वाले डिपेंडेंसी को अपने ऐप्लिकेशन की build.gradle फ़ाइल में जोड़ें. इस पेज पर दिया गया सैंपल देखें.
  4. पहने जाने वाले डिवाइस की शेयर की गई लाइब्रेरी की जानकारी, पहने जाने वाले ऐप्लिकेशन के मेनिफ़ेस्ट में जोड़ें, जैसा कि अपने ऐप्लिकेशन को सभी लोगों को दिखाने के लिए, Android की ट्रेनिंग क्लास में बताया गया है.
  5. हैंडहेल्ड और पहने जाने वाले ऐप्लिकेशन मेनिफ़ेस्ट में WAKE_LOCK अनुमति जोड़ें, जैसा कि अपने ऐप्लिकेशन को बनाए रखने में दी गई Android ट्रेनिंग क्लास में बताया गया है.
  6. अपनी गतिविधि के onCreate() तरीके में, AmbientModeSupport.attach() तरीके को कॉल करें. यह ऑपरेटिंग सिस्टम को बताता है कि ऐप्लिकेशन हमेशा चालू रहता है, ताकि जब डिवाइस बंद हो जाए, तो उसे वॉच फ़ेस पर लौटने के बजाय ऐंबियंट मोड में जाना चाहिए.
  7. अपनी ऐक्टिविटी में AmbientModeSupport.AmbientCallbackProvider इंटरफ़ेस लागू करें, ताकि वह हमेशा चालू स्क्रीन मोड की स्थिति में बदलाव ला सके.
  8. ऐंबियंट मोड पर काम करने के लिए, अपना मैप सेट करें. ऐसा करने के लिए, गतिविधि की एक्सएमएल लेआउट फ़ाइल में, map:ambientEnabled="true" एट्रिब्यूट सेट करें या फिर GoogleMapOptions.ambientEnabled(true) को सेट करके, इसे प्रोग्रामैटिक तौर पर सेट करें. इस सेटिंग से एपीआई को यह पता चलता है कि ऐंबियंट मोड में इस्तेमाल करने के लिए, मैप की ज़रूरी टाइल पहले से लोड की जानी चाहिए.
  9. जब गतिविधि ऐंबियंट मोड पर स्विच होती है, तब सिस्टम, आपके दिए गए AmbientCallback में onEnterAmbient() वाले तरीके को कॉल करता है. onEnterAmbient() को बदलें और SupportMapFragment.onEnterAmbient(ambientDetails) या MapView.onEnterAmbient(ambientDetails) को कॉल करें. API, मैप की एक गैर-इंटरैक्टिव और कम-रंग वाली रेंडरिंग को स्वैप करता है.
  10. इसी तरह, 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.OnStreetViewPanoramaLongClickListener इंटरफ़ेस का इस्तेमाल करके क्लिक करें. जब कोई उपयोगकर्ता, Street View इमेज पर कहीं भी क्लिक करता है, तो आपको एक onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation) इवेंट मिलता है. एग्ज़िट बटन दिखाने के लिए DismissOverlayView.show() को कॉल करें.

नमूना कोड

GitHub पर एक नमूना ऐप्लिकेशन उपलब्ध है, जिसका इस्तेमाल आप अपने ऐप्लिकेशन के शुरुआती बिंदु के तौर पर कर सकते हैं. नमूने के ज़रिए आप Wear OS पर बुनियादी Google मैप सेट अप करने का तरीका जान पाएंगे.

Wear OS पर Maps API में काम करने वाली सुविधा

इस सेक्शन में, हैंडहेल्ड डिवाइसों (फ़ोन और टैबलेट) की तुलना में, पहने जाने वाले डिवाइसों पर काम करने वाले फ़ंक्शन के बीच अंतर बताया गया है. जिन एपीआई सुविधाओं के बारे में नीचे नहीं बताया गया है वे पूरे एपीआई के दस्तावेज़ के हिसाब से काम करने चाहिए.

फ़ंक्शन
पूरी तरह इंटरैक्टिव मोड और लाइट मोड

आप Android के लिए Maps SDK टूल का इस्तेमाल, पूरी तरह से इंटरैक्टिव मोड या लाइट मोड में कर सकते हैं. लाइट मोड पर पहने जाने वाले डिवाइस पर परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, लाइट मोड का इस्तेमाल करें. इससे, आपके ऐप्लिकेशन को हाथ के जेस्चर (हाव-भाव) इस्तेमाल करने या मैप को पैन और ज़ूम करने की ज़रूरत नहीं पड़ती.

लाइट मोड में, उपयोगकर्ता के मैप पर टैप करने पर Google मैप मोबाइल ऐप्लिकेशन को शुरू करने की इच्छा बंद कर दी जाती है और पहने जाने वाले डिवाइस पर उसे चालू नहीं किया जा सकता.

लाइट मोड और पूरी तरह से इंटरैक्टिव मोड के बीच अंतर की पूरी सूची देखने के लिए, लाइट मोड दस्तावेज़ देखें.

मैप टूलबार मैप टूलबार बंद है और पहने जाने वाले डिवाइस पर इसे चालू नहीं किया जा सकता.
यूज़र इंटरफ़ेस (यूआई) कंट्रोल पहने जाने वाले डिवाइस पर, यूज़र इंटरफ़ेस (यूआई) कंट्रोल डिफ़ॉल्ट रूप से बंद होते हैं. इसमें ज़ूम, कंपास, और जगह की जानकारी की सेटिंग से जुड़ी सेटिंग शामिल हैं. UiSettings क्लास का इस्तेमाल करके, इन्हें हमेशा की तरह चालू किया जा सकता है.
हाथ के जेस्चर एक बार छूने पर, हाथ के जेस्चर की सुविधा उम्मीद के मुताबिक काम करती है. उदाहरण के लिए, मैप को पैन करने के लिए, दो बार टैप करें और ज़ूम इन करने के लिए, उस पर दो बार टैप करें. उपयोगकर्ता के डिवाइस के हिसाब से, मल्टी-टच जेस्चर (हाव-भाव) के साथ काम करता है. मल्टी-टच जेस्चर के उदाहरणों में, मैप को झुकाने के लिए दो उंगलियों से पुश करना, ज़ूम करने के लिए पिंच करना, और दो उंगलियों से घुमाना शामिल है.
इनडोर नक्शे और इमारतें इनडोर मैप किसी पहने जाने वाले डिवाइस पर डिफ़ॉल्ट रूप से बंद होते हैं. इन्हें चालू करने के लिए, GoogleMap.setIndoorEnabled(true) को कॉल करें. अगर इनडोर मैप चालू हैं, तो मैप डिफ़ॉल्ट फ़्लोर लेवल दिखाएगा. लेवल पिकर यूज़र इंटरफ़ेस (यूआई) एलिमेंट, पहने जाने वाले डिवाइसों पर काम नहीं करता.
टाइल ओवरले टाइल ओवरले, पहने जाने वाले डिवाइसों पर काम नहीं करते.

Wear OS पर Maps API के साथ डेवलप करने के सबसे सही तरीके

अपने ऐप्लिकेशन में बेहतरीन उपयोगकर्ता अनुभव देने का तरीका:

  • मैप में बहुत बड़ी स्क्रीन होनी चाहिए. यह किसी पहने जाने वाले डिवाइस के छोटे रूप के फ़ैक्टर पर मैप की उपयोगिता को ऑप्टिमाइज़ करने के लिए ज़रूरी है.
  • अपने ऐप्लिकेशन का उपयोगकर्ता अनुभव तैयार करते समय, इस बात का ध्यान रखें कि पहने जाने वाले डिवाइस की बैटरी कम होती है. स्क्रीन को सक्रिय रखने और मैप को देखने योग्य बनाने से बैटरी का प्रदर्शन प्रभावित होगा.