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

Adım adım veri feed'i, e-posta göndermek istemiyorsanız harita tabanlı navigasyon rehberliği için tasarlanmıştır. Yaklaşan manevralar için sağladığınız öğeler:

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

Ayrıntılı feed'i kullanarak eksiksiz kullanıcı deneyimi sunan deneyimler oluşturabilirsiniz. Gezinme SDK'sı kullanıcı arayüzü, Android Auto veya küçük kullanıcı arayüzü gibi uygun değil tam Android yığınının bulunmadığı bir ekran gösteriliyor. Örneğin, iki tekerlekli araç sürücüleri için bunu kullanabilirsiniz. Böylece, hedeflerine daha hızlı ulaşmalarına yardımcı olacak ve yalnızca navigasyonla ilgili yol gösterici bilgiler güvenle ve güvenle.

SDK'yı kullanmak için bir hizmet oluşturup Android için Navigasyon SDK'sı (yeni gezinme bilgileri alabilmesi için) anlık olarak gösterir (gezinme sırasında yaklaşık saniyede bir kez).

Bu dokümanda, Google Haritalar'da bulunan bir navigasyon hizmetini SDK'dan gezinme bilgilerini alır ve gezinme durumunu sağlar aktarım yapabilirsiniz.

Genel Bakış

Bu bölümde, TurnByTurn kitaplığını projelerinize nasıl ekleyeceğiniz ve adım adım işlevi oluşturmak için gereken akışı özetler.

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ı ana makine Maven deposuna erişecek şekilde ayarlayın:

    Maven

    pom.xml dosyanıza aşağıdakileri ekleyin:

        <project>
          ...
          <repositories>
            <repository>
              <id>google-maven-repository</id>
              <url>https://maven.google.com</url>
            </repository>
          </repositories>
          ...
        </project>
        
        

    Gradle

    build.gradle dosyanıza aşağıdakileri ekleyin:

    repositories {
        ...
        google()
    }
        
  2. Maven veya Gradle yapılandırmanıza şu bağımlılığı ekleyin:
  3. 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. İlgili içeriği oluşturmak için kullanılan 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.

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

Navigasyon SDK'sı, TurnByTurn hizmetinize bağlanır ve Android Messenger , Bu güncellemeler için yeni bir navigasyon hizmeti oluşturabilir veya geliştirmenizi sağlar.

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

Aşağıdaki örnekte yer alan hizmet, navigasyon bilgilerini alır ve verileri NavInfo nesnesine dönüştürmek için TurnByTurnManager içerir.

/**
 *   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 mesaj, Message.what Message sınıfının değerine ayarlanır. Bu alan TurnByTurnManager.MSG_NAV_INFO.

Hizmeti navigasyon güncellemeleri için kaydetme

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

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

Hizmeti başlatma ve durdurma

Navigasyon hizmeti, Gezinme SDK'sı buna bağlıdır. Şu telefon numarasını manuel olarak arayabilirsiniz: Navigasyon hizmet ömrünü kontrol etmek için startService() ve stopService() ancak hizmetinizi navigasyon SDK'sı, hizmetiniz otomatik olarak başlar ve Yalnızca kaydını iptal ettiğinizde durur. Uygulamanızı nasıl ayarladığınıza bağlı olarak ön plan hizmeti başlatmak istiyorsanız belgeler Hizmetler genel bakış bölümüne bakın.

Hizmetin kaydı iptal ediliyor

Navigasyon güncellemelerini almayı durdurmak için hizmetin kaydını şuradan iptal edin: Gezinme SDK'sı.

navigator.unregisterServiceForNavUpdates();

Gezinme durumlarını anlama

Navigasyonun mevcut durumunu öğrenmek için NavInfo.getNavState() kullanın. şunlardan biri:

  • Yolda: ENROUTE durumu, rehberli gezinmenin şu anda etkin ve kullanıcı sağlanan rotada. Güncel bilgi mevcut manevra adımı kullanılabilir.

  • Yeni rota belirleniyor: REROUTING, navigasyonun devam ettiği anlamına gelir, ancak yeni bir rota arıyor. Yaklaşan manevra adımı , çünkü henüz yeni bir rota yok. Örnek uygulamada "Yeni rota belirleniyor..." mesajın göründüğü yer gezinme bilgileri ekranına geri dönün. Rota bulunduğunda NavInfo mesajı gösterilir ENROUTE durumuyla gönderildi.

  • Durduruldu: STOPPED gezinmenin sona erdiği anlamına gelir. Örneğin, gezinme Kullanıcı uygulamada gezinmeden çıktığında durur. Örnek uygulamada STOPPED durumu, adımlarda gecikmeyi önlemek için gezinme bilgi ekranını temizler gösterilmesini engeller.

Feed ekranını doldur

Artık adım adım hizmetinizi kurduğunuza göre bu bölümde için yönlendirme kartlarını doldurmak üzere kullanabileceğiniz görsel feed'i kullanabilirsiniz.

W Ahwanee&#39;ye 30 metre içinde sola doğru bir dönüş gösteren cep telefonu ekranı
Aynen. Ekranın alt kısmında, hedefe varmak için kalan süre 46 dakikadır.
ve kalan mesafe 39
mil.

Kullanıcı rehberli navigasyona girdiğinde, en üstte bir gezinme kartı görünür. Gezinme SDK'sı. İlgili resimde gezinme öğelerini burada görebilirsiniz.

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ı

Gezinme SDK'sı, gezinme bölmesindeki şeritleri temsil eder kartı farklı çevir Şerit ve LaneDirection veri nesnelerini kullanır. Lane nesnesi navigasyon sırasında belirli bir şeridi temsil eder ve olabilecek tüm dönüşleri açıklayan LaneDirection nesne listesi içerir daha iyi olur.

Örnek şerit yardımı
yapılandırma.

Kullanıcının bir şeritte izlemesi gereken yön, isRecommended girin.

Şerit yardımı örneği

Aşağıdaki snippet, görüntülenen şeritlerin veri temsilini göstermektedir bölümünü ziyaret edin.

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

İlgili içeriği oluşturmak için kullanılan Maneuver enum, gezinirken gerçekleşebilecek her manevrayı tanımlar ve StepInfo.getManeuver() yönteminden belirli bir adımın manevrasını alabilir.

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

Bazı manevralar ek bir clockwise veya counterclockwise etiketi içeriyor, Araç, SDK'nın bir ülkenin sürüş durumuna göre belirlediğini gösterir. Örneğin, sol tarafta olduğu ülkelerde, sürücüler saat yönünde, döner kavşak veya U dönüşü, sağ tarafında saat yönünde gitmesini sağlar. Navigasyon SDK'sının algıladığı trafiğin sol veya sağ taraf trafiğinde gerçekleşip gerçekleşmediğini ve sağ taraftaki uygun manevra bulunur. Bu nedenle, hareketiniz için manevra simgeniz çevirmeye kıyasla saat yönünde.

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 tarafından sağlanan, oluşturulan simgelerin küçük bir listesi
SDK&#39;dır.

Android Auto kullanım alanlarını kolaylaştırmak için Navigasyon SDK'sı manevra ve şerit oluşturmayı destekler rehberlik simgelerini kullanın. Bu simgeler, Android Auto'nun resim boyutlandırma kılavuzuna uyar. 500 x 74 dp sınırlayıcı kutu hedeflemesini öneren Araba Uygulaması kitaplığı. Görüntüleyin setsLaneImage ve CarIcon Android referans dokümanlarına göz atabilirsiniz.

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ştirdikten sonra, TurnbyTurn StepInfo nesnesi otomatik olarak maneuverBitmap ve lanesBitmap alanlarının simgeleriyle birlikte gösteriliyor.

Sırada ne var?