Wear OS'te Maps API

Giyilebilir cihazdaki bir harita

Android için Haritalar SDK'sını kullanarak harita tabanlı bir giyilebilir uygulama oluşturabilirsiniz. doğrudan Wear OS by Google cihazlarında çalışan bir uygulamadır. Uygulamanızın kullanıcıları yalnızca bileklerine bakarak konumunu görebiliyor. Şunları yapabilirler: bir rota üzerinde konumlarını çizebilir, örneğin daha sonra ayrıntıları görmek için yakınlaştırabilir veya bir uygulamanız tarafından sağlanan bilgi penceresini gösterir.

Bu sayfada, Wear cihazlarda kullanılabilen API işlevi açıklanmaktadır uygulamanızı geliştirmeye başlamanıza yardımcı olur.

Wear OS'i kullanmaya başlama

Android için Haritalar SDK'sı ile giyilebilir bir uygulama oluşturmak başka herhangi bir Android cihaz için Google Haritalar uygulaması oluşturmakla aynı şekilde. Fark daha küçük form faktörüne yönelik tasarımınızda yer alıyor. Uygulamanın kullanılabilirliğini ve performansını optimize etmek.

Android Studio, Wear OS geliştirme için önerilen araçtır. ve paketleme kolaylığı sağlar.

Giyilebilir cihaz uygulaması tasarlamayla ilgili genel yardım için Wear OS tasarım yönergeleri. ilk giyilebilir uygulama geliştirmek için giyilebilir uygulama oluşturma kılavuzuna bakın.

Wear OS'te ilk harita uygulamanızı oluşturma

Bu hızlı kılavuzda, Android için Haritalar SDK'sı hakkında bilgi sahibi olduğunuz varsayılmaktadır. Wear OS kılavuzlarını izlediğinizden emin olun. şimdi de giyilebilir cihaz modülüne harita eklemek istediğinizi düşünelim.

Wear modülünüze bağımlılık ekleme

build.gradle dosyasına aşağıdaki bağımlılıkların eklendiğinden emin olun. uygulamanızın Wear OS modülünün

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'
}

Bağımlılıklar hakkında daha fazla bilgi için Mevcut projenizde Wear OS modülü.

Kapatmak için hızlıca kaydırma hareketi uygulama ve başlangıç arka plan rengini ayarlama

Haritayı şurada görüntülemek için SwipeDismissFrameLayout kullanmanız önerilir: Giyilebilir cihazda. SwipeDismissFrameLayout sınıfını kullanarak şunları yapabilirsiniz: devre dışı bırakmak için kaydırma hareketini uygulayarak kullanıcılara ekranın en sol kenarından hızlıca kaydırarak uygulamadan çıkabilirsiniz.

Özel bir başlangıç arka plan rengi ayarlamak için map:backgroundColor XML kullanın özelliğini kullanmanızı öneririz.

Düzeninize SwipeDismissFrameLayout ve backgroundColor öğelerini ekleyin SupportMapFragment öğesinin kapsayıcısı olarak tanımlanır:

  <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>

Etkinliğinizde SwipeDismissFrameLayout nesnesini elde ettiğinizde geri çağırma işlevini kullanın ve gerekli kapatma işlemini gerçekleştirmek için geri çağırma davranışını aşağıdaki gibi işlem yapın:

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);
    }

    // ...
}

      

Harita ekleme

Her zamanki gibi onMapReady(GoogleMap) geri çağırma yöntemini kullanın, simgesini tıklayın.GoogleMap Geri çağırma: harita kullanıma hazır olduğunda tetiklenir. Geri çağırma yönteminde haritaya işaretçi veya çoklu çizgi ekleyebilir, dinleyici ekleyebilir veya kamerayı hareket ettirebilirsiniz. İlgili içeriği oluşturmak için kullanılan aşağıdaki örnekte, Sydney Opera Binası'nın yakınında bir işaretçi ekler:

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));
}

      

Ambiyans modunu etkinleştirme

Android için Haritalar SDK'sı, giyilebilir cihazlarda ambiyans modunu destekler. Ambiyans modunu destekleyen uygulamalar bazen her zaman açık uygulamalar olarak da adlandırılır. Ambiyans modu, kullanıcı artık uygulamayı aktif olarak kullanmıyorken etkinleştirilir. ve uygulamanın giyilebilir cihazda görünmesine olanak tanır.

Android için Haritalar SDK'sı basitleştirilmiş, düşük renkli oluşturma olanağı sağlar kullanmak üzere özelleştirebilirsiniz. Daha sonra, harita stili etkileşimli moddan ambiyans moduna geçer. Tüm işaretçiler, nesneler ve kullanıcı arayüzü kontroller ambiyans modunda kaybolur. Bu da evinizin güç tüketimini azaltır Bu, Android ve iOS cihazlar gibi diğer ortam uygulamalarıyla tutarlı bir görünüm kadranlar.

Uygulamanızın, haritanın ambiyans modunu kullanmasını sağlamak için aşağıdaki adımları uygulayın:

  1. Android SDK'nızı, Android 6.0 (API 23) veya sonraki bir sürümü içerecek şekilde güncelleme platformu, etkinlikleri ortama aktarmaya olanak tanıyan API'ler sağlar yatırım yapmanız önemlidir. SDK'nızı nasıl güncelleyeceğiniz hakkında bilgi edinmek için Android dokümanlarına bakın SDK paketleri ekleme hakkında daha fazla bilgi edinin.
  2. Uygulama manifesti'nde targetSdkVersion ile 23 veya sonraki bir sayı arasında olmalıdır.
  3. Giyilebilir cihaz bağımlılıklarını, uygulamanızın build.gradle dosyasına ekleyin. Bkz. örnekleri inceleyin.
  4. Giyilebilir cihaz paylaşılan kitaplık girişini giyilebilir cihaz uygulama manifest'ine aşağıdaki gibi ekleyin: Android eğitim dersinde uygulamanızı görünür kılmaya.
  5. Avuç içi ve giyilebilir cihaz uygulama manifestlerine WAKE_LOCK iznini ekleyin. Android eğitim dersinde açıklandığı gibi uygulamanızı görünür kılmaya.
  6. Etkinliğinizin onCreate() yönteminde şunu çağırın: AmbientModeSupport.attach() yöntemini kullanabilirsiniz. Bu sayede uygulamanın her zaman açık olmasını sağlar. Böylece, cihaz cihaz kapatıldığında kol saatine dönmek yerine ambiyans moduna girmelidir yüzü.
  7. AmbientModeSupport.AmbientCallbackProvider arayüzünü Ambiyans modu durum değişikliklerini alabilmesi için etkinlik.
  8. Haritanızı, ambiyans modunu destekleyecek şekilde ayarlayın. Bunu, Search Ads 360'taki XML düzen dosyasında map:ambientEnabled="true" özelliğini kullanın veya bu özelliği GoogleMapOptions.ambientEnabled(true) ayarlayarak programatik olarak yapabilirsiniz. Bu ayar, API'ye etkinlik için gerekli harita karolarını önceden yüklemesi gerektiğini bildirir. ambiyans modunda kullanın.
  9. Etkinlik ambiyans moduna geçtiğinde sistem onEnterAmbient() yöntemini kullanarak AmbientCallback sağlar. Geçersiz kıl onEnterAmbient() ve çağrı SupportMapFragment.onEnterAmbient(ambientDetails) veya MapView.onEnterAmbient(ambientDetails). API, haritanın etkileşimli olmayan ve düşük renkli oluşturulması.
  10. Benzer şekilde, onExitAmbient() çağrısında SupportMapFragment.onExitAmbient() veya MapView.onExitAmbient(). API haritanın normal görünümüne geçer.

Aşağıdaki kod örneği, etkinlikte ambiyans modunu etkinleştirir:

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();
            }
        };
    }
}

      

Uygulama ambiyans modundayken ekranı güncelleyebilirsiniz. Ayrıntılı bilgi için genel olarak ambiyans moduyla ilgili daha fazla bilgi edinmek için Android uygulamanızı görünür tutmayla ilgili bir eğitim kursuna göz atın.

Street View'ı Wear OS'te kullanma

Street View giyilebilir cihazlarda tam olarak desteklenir.

Kullanıcıların bir Street View panoramasını görüntülerken uygulamadan çıkmasına izin vermek için StreetViewPanorama.OnStreetViewPanoramaLongClickListener kullanıcı arayüzünde uzun tıklama hareketini dinleyeceksiniz. Kullanıcı bir yeri uzun tıkladığında tıkladığınızda, açıklamada bir onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation) etkinliği. Telefonla arama Çıkış düğmesini görüntülemek için DismissOverlayView.show().

Örnek kod

GitHub'da bulabileceğiniz örnek uygulamamızı başlangıç noktası olduğunu unutmayın. Örnekte, kampanyalarınızı nasıl yapılandıracağınızı Wear OS'te temel bir Google Haritası.

Wear OS'teki Maps API'de desteklenen işlevler

Bu bölümde, Google Haritalar'da desteklenen işlevlerdeki farklılıklar %38'e varan oranda giyilebilir cihaz kullanımıyla ilgili bilgiler yer alıyor. Aşağıda belirtilmeyen tüm API özellikleri, tam API için belgelendiği gibi çalışmalıdır.

İşlevsellik
Tamamen etkileşimli mod ve basit mod

Android için Haritalar SDK'sını tam etkileşimli modda veya basit modda çalışır. Şu cihazlarda performansı optimize etmek istiyorsanız basit modu kullanabilirsiniz: Giyilebilir cihazın, uygulamanızın Hareketler veya haritayı kaydırma ve yakınlaştırma gibi etkileşimler.

Basit modda, etkinleştirildiğinde Google Haritalar mobil uygulamasını kullanıcı haritaya dokunduğunda devre dışı ve şurada etkinleştirilemez: giyilebilir bir cihaz.

Basit mod ile tamamen etkileşimli arasındaki farkların tam listesi için için basit moda göz atın belgelerinden faydalanabilirsiniz.

Harita araç çubuğu Harita araç çubuğu devre dışıdır ve giyilebilir cihaz.
Kullanıcı arayüzü kontrolleri Kullanıcı arayüzü kontroller, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Buna şunlar dâhildir: yakınlaştırma, pusula ve konum denetimlerim. Bunları şurada etkinleştirebilirsiniz: UiSettings devam etmektir.
Hareketler Tek dokunma hareketler beklendiği gibi çalışıyor. Örnek olarak şunlar verilebilir: haritayı kaydırmak için dokunup sürükleme, iki kez dokunma yakınlaştırmak için, uzaklaştırmak için iki parmağınızla dokunun. Çoklu dokunma hareketleri için destek, kullanıcının cihazına bağlı olarak değişir. Çok dokunmalı hareketlere örnek olarak haritayı yatırmak için iki parmakla itme, iki parmakla itme, yakınlaştırmak için sıkıştırın ve iki parmağınızla döndürün.
İç mekan haritaları ve binaları İç mekan haritaları varsayılan olarak devre dışı olmasıdır. Bu özellikleri şu numarayı arayarak etkinleştirebilirsiniz: GoogleMap.setIndoorEnabled(true). İç mekan haritaları etkinleştirildiğinde, haritada varsayılan kat düzeyi gösterilir. düzeyi seçici kullanıcı arayüzü öğesi, giyilebilir cihazlarda desteklenmiyor.
Yer paylaşımlı karo Karo yer paylaşımları: Giyilebilir cihazlarda desteklenmez.

Wear OS'te Maps API ile uygulama geliştirmeyle ilgili en iyi uygulamalar

Uygulamanızda en iyi kullanıcı deneyimini sunma:

  • Harita, ekranın büyük bir kısmını kaplamalıdır. Bu işlem, Giyilebilir bir cihazın küçük form faktörüne göre haritanın kullanılabilirliğini optimize etmek olanak tanır.
  • Uygulamanızın kullanıcı deneyimini tasarlarken kullanıcı deneyimini tespit edebilirsiniz. Ekranı etkin durumda tutmak ve Haritanın görünür olması pil performansını etkiler.