Adım adım veri feed'ini etkinleştir

Adım adım veri feed'i, harita tabanlı navigasyon yardımı için tasarlanmamış cihazlara yalnızca navigasyon bilgileri sağlar. Gelecek manevralara sağladığınız öğeler ile sağlanıyor:

  • simgeler (sola, sağa, U dönüşü)
  • Döner kavşaklarda numaraları çevir
  • yol adları
  • bir sonraki navigasyon adımına veya nihai hedefe kalan tahmini mesafe ve süre

Adım adım feed'i kullanarak Android Auto veya tam Android yığınının kullanılamadığı küçük ekran görüntüleri gibi tam Gezinme SDK'sı kullanıcı arayüzünün uygun olmadığı deneyimler oluşturabilirsiniz. Örneğin, iki tekerlekli araç kullanıcıları için bu özellikten yararlanabilirsiniz. Yolcularına, minimum dikkat dağınıklığıyla daha hızlı ve güvenli bir şekilde ulaşmalarına yardımcı olmak için yalnızca navigasyon yardımı yansıtabilirsiniz.

SDK'yı kullanmak istiyorsanız bir hizmet oluşturup Android için Gezinme SDK'sına kaydetmeniz gerekir. Böylece ilgili hizmet, yeni gezinme bilgilerini anlık olarak alabilir (gezinme sırasında yaklaşık saniyede bir kez).

Bu dokümanda, SDK'dan gezinme bilgilerini alan ve alıcı cihaza gezinme durumunu sağlayan bir gezinme hizmetinin nasıl oluşturulacağı ve kaydedileceği gösterilmektedir.

Genel bakış

Bu bölümde, TurnByTurn kitaplığını projelerinize nasıl ekleyeceğiniz açıklanmakta ve adım adım bina işlevi için üst düzey akış özetlenmektedir.

TurnByTurn kitaplığının bağımsız bir sürümünü kullanmak için aşağıdaki adımları uygulayın:

  1. Ortamınızı, Seyahat ve Sipariş Belgeleri'ndeki Sürücü SDK'sını Kullanmaya Başlama bölümünde açıklandığı şekilde ana makine Maven deposuna erişecek şekilde ayarlayın.

  2. Maven veya Gradle yapılandırmanıza şu bağımlılığı ekleyin:

    Maven

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.maps</groupId>
        <artifactId>google_turnbyturn</artifactId>
        <version>1.0.0</version>
      </dependency>
    </dependencies>
    

    Gradle

    dependencies {
      ...
      implementation 'com.google.android.maps:google_turnbyturn:1.0.0'
    }
    

İndirilen bir JAR dosyası (alternatif) kullanarak TurnByTurn kitaplığını projenize ekleyin.

TurnByTurn kitaplığı, bu SDK klasöründe JAR dosyası olarak mevcuttur. Erişiminiz yoksa temsilcinizle iletişime geçin.

  1. google_turnbyturn_*.jar dosyasını indirip sıkıştırılmış dosyayı açın.
  2. İndirilen JAR dosyasını projenizin app/libs dizinine kopyalayın.
  3. JAR'ı derlemenize dahil etmek için build.gradle uygulamanıza aşağıdakileri ekleyin.

    dependencies {
       ...
       api fileTree(include: ['*.jar'], dir: 'libs')
    }
    

TurnByTurn Kitaplığını kullanma

Adım adım işlevini etkinleştirmek için gereken üst düzey adımları aşağıda bulabilirsiniz. Aşağıdaki bölümlerde her bir adımla ilgili ayrıntılar verilmiştir.

  1. Navigasyon güncellemelerini almak için bir hizmet oluşturun.

  2. Hizmeti kaydedin.

  3. Gezinme durumlarını anlama

  4. Temel öğeleri gösteren bir gezinme görünümü örneğine bakın.

Gezinme güncellemelerini almak için hizmet oluşturun {#service}

Gezinme SDK'sı, TurnByTurn hizmetinize bağlanır ve hizmeti Android Messenger aracılığıyla gezinme güncellemeleri gönderir. Bu güncellemeler için yeni bir navigasyon hizmeti oluşturabilir veya mevcut bir hizmeti kullanabilirsiniz.

Navigasyon güncellemelerini almak için bir hizmet kullanmanın yararı, hizmetin ayrı bir arka plan işleminde çalışabilmesidir.

Aşağıdaki örnekte yer alan hizmet, gezinme bilgilerini alır ve verileri gezinme ayrıntılarını içeren bir NavInfo nesnesine dönüştürmek için TurnByTurnManager öğesini kullanır.

/**
 *   Receives turn-by-turn navigation information forwarded from NavSDK.
 */
public class NavInfoReceivingService extends Service {
  /** The messenger used by the service to receive nav step updates. */
  private Messenger incomingMessenger;
  private TurnByTurnManager turnByTurnManager;

  private final class IncomingNavStepHandler extends Handler {
    public IncomingNavStepHandler(Looper looper) {
      super(looper);
    }

    @Override
    public void handleMessage(Message msg) {
      // Identify the message through the msg.what field.
      if (TurnByTurnManager.MSG_NAV_INFO == msg.what) {
        // Extract the NavInfo object using the TurnByTurnManager.
        NavInfo navInfo = turnByTurnManager
          .readNavInfoFromBundle(msg.getData()));
      // Do something with the NavInfo
    }
  }
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
  return incomingMessenger.getBinder();
}

@Override
public void onCreate() {
  turnByTurnManager = TurnByTurnManager.createInstance();
  HandlerThread thread =
    new HandlerThread("NavInfoReceivingService",
      Process.THREAD_PRIORITY_DEFAULT);
  thread.start();
  incomingMessenger = new Messenger(
    new IncomingNavStepHandler(thread.getLooper()));
}

Mesaj kodları

NavInfo mesajları, Message sınıfının TurnByTurnManager.MSG_NAV_INFO değeri olarak ayarlanan Message.what alanından tanımlanabilir.

Gezinme güncellemeleri için hizmet kaydediliyor {#register}

Aşağıdaki kod snippet'leri, gezinme hizmetini kaydeder.

boolean isNavInfoReceivingServiceRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);

Hizmeti başlatma ve durdurma

Gezinme SDK'sı ona bağlı olduğu sürece gezinme hizmeti etkindir. Navigasyon hizmet yaşam döngüsünü kontrol etmek için startService() ve stopService() hizmetlerini manuel olarak arayabilirsiniz. Ancak hizmetinizi Gezinme SDK'sına kaydettiğinizde hizmetiniz otomatik olarak başlar ve yalnızca kaydını sildiğinizde durur. Uygulamanızı nasıl kurduğunuza bağlı olarak, Android belgelerindeki Hizmetlere genel bakış bölümünde açıklanan bir ön plan hizmeti başlatmayı düşünebilirsiniz.

Hizmetin kaydı iptal ediliyor

Navigasyon güncellemeleri almayı durdurmak için Navigasyon SDK'sında hizmetin kaydını iptal edin.

navigator.unregisterServiceForNavUpdates();

Gezinme durumlarını anlama {#states}

Gezinmenin mevcut durumunu öğrenmek için NavInfo.getNavState() kullanın. Bu durum aşağıdakilerden biridir:

  • Yolda: ENROUTE durumu, rehberli navigasyonun o anda etkin olduğu ve kullanıcının belirtilen rotada olduğu anlamına gelir. Yaklaşan manevra adımıyla ilgili bilgi mevcut.

  • Yeni rota belirleniyor - REROUTING, navigasyonun devam ettiği, ancak navigasyonun yeni bir rota aradığı anlamına gelir. Henüz yeni bir rota olmadığından yaklaşan manevra adımı kullanılamıyor. Örnek uygulamada, gezinme bilgileri ekranında "Yeni rota belirleniyor..." mesajı görünür. Bir rota bulunduğunda ENROUTE durumunu içeren bir NavInfo mesajı gönderilir.

  • Durduruldu: STOPPED gezinmenin sona erdiği anlamına gelir. Örneğin, kullanıcı uygulamada gezinmeden çıktığında gezinme durur. Örnek uygulamada STOPPED durumu, geciken adım talimatlarının görüntülenmesini önlemek için navigasyon bilgisi ekranını temizler.

Feed ekranını doldur

Artık adım adım hizmetinizi ayarladığınıza göre bu bölümde, adım adım feed için rehberlik kartlarını doldurmak üzere kullanabileceğiniz görsel ve metin öğeleri ele alınmaktadır.

W Ahwanee Caddesi&#39;nde 30 fit sonra sola dönüşü gösteren bir mobil
ekran. Ekranın alt kısmında, hedefe varmak için kalan süre 46 dakika, kalan mesafe ise 39 mildir.

Sürücü rehberli navigasyona girdiğinde üst kısımda, Navigasyon SDK'sından doldurulan navigasyon tarihini içeren bir gezinme kartı görünür. İlgili resimde, bu önemli gezinme öğelerinin bir örneği gösterilmektedir.

Bu tabloda, gezinme bilgisi alanları ve bunları nerede bulabileceğiniz gösterilir.

Her gezinme adımına ait alanlar Genel geziyle ilgili alanlar
Bulunduğu yer: StepInfo Bulunduğu yer: NavInfo
Yolun tam adı Kalan süre
Manevra simgesi Hedefe olan mesafe
Bir sonraki adıma kalan mesafe
Şerit yardımı alanları

Şerit yardımı

Navigasyon SDK'sı, navigasyon dönüş kartındaki şeritleri Lane ve LaneDirection veri nesneleri olarak gösterir. Lane nesnesi, navigasyon sırasında belirli bir şeridi temsil eder ve bu şeritten yapılabilecek tüm dönüşleri açıklayan LaneDirection nesnelerin listesini içerir.

Örnek bir şerit yardımı yapılandırması.

Sürücün bir şeritte izlemesi gereken önerilen yön, isRecommended alanı aracılığıyla işaretlenir.

Şerit yardımı örneği

Aşağıdaki snippet'te, yukarıda görüntülenen şeritlerin veri gösterimi gösterilmektedir.

// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
                  {/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]

// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]

Manevralar için simgeler oluşturun

Maneuver sıralaması, navigasyon sırasında gerçekleşebilecek her bir olası manevrayı tanımlar ve belirli bir adım için manevrayı StepInfo.getManeuver() yönteminden alabilirsiniz.

Manevra simgeleri oluşturmalı ve bunları ilişkili manevralarıyla eşleştirmelisiniz. Bazı manevralarda, DESTINATION_LEFT ve DESTINATION_RIGHT gibi bir simgeyle bire bir eşleme ayarlayabilirsiniz. Ancak, bazı manevralar benzer olduğundan, tek bir simgeye birden fazla manevra eşlemek isteyebilirsiniz. Örneğin, TURN_LEFT ve ON_RAMP_LEFT, sola dön simgesiyle eşlenebilir.

Bazı manevralar, SDK'nın ülkenin sürüş durumuna göre belirlediği ek bir clockwise veya counterclockwise etiketi içerir. Örneğin, sürüşün yolun sol tarafında olduğu ülkelerde, sürücüler saat yönünde bir döner kavşakta veya U dönüşü kullanırken yolun sağ tarafındaki ülkeler saat yönünde gider. Gezinme SDK'sı, bir manevranın sol veya sağ taraftaki trafikte mi gerçekleştiğini algılar ve uygun manevrayı verir. Bu nedenle, manevra simgeniz saat yönünün tersine davranış için farklı olabilir.

Farklı manevralara ilişkin örnek simgeleri görmek için genişletin

Örnek Simge TurnbyTurn Manevraları
DEPART
UNKNOWN
STRAIGHT
ON_RAMP_UNSPECIFIED
OFF_RAMP_UNSPECIFIED
NAME_CHANGE
TURN_RIGHT
ON_RAMP_RIGHT
TURN_LEFT
ON_RAMP_LEFT
TURN_SLIGHT_RIGHT
ON_RAMP_SLIGHT_RIGHT
OFF_RAMP_SLIGHT_RIGHT
TURN_SLIGHT_LEFT
ON_RAMP_SLIGHT_LEFT
OFF_RAMP_SLIGHT_LEFT
TURN_SHARP_RIGHT
ON_RAMP_SHARP_RIGHT
OFF_RAMP_SHARP_RIGHT
TURN_SHARP_LEFT
ON_RAMP_SHARP_LEFT
OFF_RAMP_SHARP_LEFT
TURN_U_TURN_COUNTERCLOCKWISE
ON_RAMP_U_TURN_COUNTERCLOCKWISE
OFF_RAMP_U_TURN_COUNTERCLOCKWISE
TURN_U_TURN_CLOCKWISE
ON_RAMP_U_TURN_CLOCKWISE
OFF_RAMP_U_TURN_CLOCKWISE
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_RIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
ROUNDABOUT_STRAIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_LEFT_CLOCKWISE
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
ROUNDABOUT_U_TURN_CLOCKWISE
ROUNDABOUT_COUNTERCLOCKWISE
ROUNDABOUT_CLOCKWISE
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
ROUNDABOUT_EXIT_CLOCKWISE
MERGE_RIGHT
OFF_RAMP_RIGHT
MERGE_LEFT
OFF_RAMP_LEFT
FORK_RIGHT
TURN_KEEP_RIGHT
ON_RAMP_KEEP_RIGHT
OFF_RAMP_KEEP_RIGHT
FORK_LEFT
TURN_KEEP_LEFT
ON_RAMP_KEEP_LEFT
OFF_RAMP_KEEP_LEFT
MERGE_UNSPECIFIED
DESTINATION
DESTINATION_RIGHT
DESTINATION_LEFT
FERRY_BOAT
FERRY_TRAIN

Oluşturulan simgeleri kullan

Gezinme SDK&#39;sı tarafından sağlanan simgelerin küçük bir listesi.

Navigasyon SDK'sı, Android Auto kullanım alanlarını kolaylaştırmak için manevra ve şerit rehberi simgelerinin oluşturulmasını destekler. Bu simgeler, 500 x 74 dp sınırlayıcı kutunun hedeflenmesini öneren Android Auto Araba Uygulaması kitaplığının resim boyutlandırma kılavuzuna uyar. Ayrıntılar için Android referans belgelerinde setsLaneImage ve CarIcon'a bakın.

Simge oluşturma örneği

NavigationUpdatesOptions options =
  NavigationUpdatesOptions.builder()
             .setNumNextStepsToPreview(numNextStepsToPreview)
             .setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
             .setDisplayMetrics(getResources().getDisplayMetrics())
             .build();
boolean isRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(),
              NavInfoReceivingService.class.getName(),
              options);

Simge oluşturma özelliğini etkinleştirmenizin ardından TurnbyTurn StepInfo nesnesi, maneuverBitmap ve lanesBitmap alanlarını simgelerle doldurur.

Sırada ne var?