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. Sağlanan öğelerle yaklaşan manevralar için aşağıdakiler sağlanır:

  • simgeleri (sol, sağ, U dönüşü)
  • döner kavşaklardaki dönüş numaraları
  • 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ç sürücüleri için bu özelliği kullanabilirsiniz. Bu sayede, sürücülerin dikkatini dağıtmadan varış noktalarına daha hızlı ve daha güvenle ulaşmalarına yardımcı olmak için yalnızca navigasyon rehberliği yansıtabilirsiniz.

SDK'yı kullanmak için bir hizmet oluşturup Android için Navigasyon SDK'sına kaydedersiniz. Böylece, yeni navigasyon bilgilerini gerçek zamanlı olarak (navigasyon sırasında yaklaşık saniyede bir) alabilir.

Bu belgede, SDK'dan navigasyon bilgilerini alan ve alıcı cihaza navigasyon durumunu sağlayan bir navigasyon hizmetinin nasıl oluşturulacağı ve kaydedileceği açıklanmaktadır.

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ı 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 aşağıdaki 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 bulunur. Erişiminiz yoksa temsilcinizle iletişime geçin.

  1. google_turnbyturn_*.jar dosyasını indirip arşivden çıkarın.
  2. İndirilen JAR dosyasını projenizin app/libs dizinine kopyalayın.
  3. JAR'ı derlemenize dahil etmek için build.gradle bölümüne aşağıdakini 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 adımla ilgili ayrıntılı bilgi verilmektedir.

  1. Gezinme güncellemeleri almak için bir hizmet oluşturun.

  2. Hizmeti kaydedin.

  3. Gezinme durumlarını anlama.

  4. Temel öğeleri gösteren bir gezinme ekranı örneğine bakın.

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

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üncellemeleri almak için bir hizmet kullanmanın avantajı, 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.

Hizmeti navigasyon güncellemeleri için kaydetme

Aşağıdaki kod snippet'leri navigasyon 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 hizmeti yaşam döngüsünü kontrol etmek için startService() ve stopService() işlevlerini manuel olarak çağırabilirsiniz. Ancak hizmetinizi Navigation SDK'ya 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

Aşağıdakilerden biri olan navigasyonun mevcut durumunu almak için NavInfo.getNavState() kullanın:

  • 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, navigasyon bilgi ekranında "Yeni rota oluşturuluyor..." mesajı görünür. Bir rota bulunduktan sonra ENROUTE durumunu içeren bir NavInfo mesajı gönderilir.

  • Durduruldu: STOPPED, navigasyonun sona erdiğini gösterir. Ö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 gezinme bilgileri ekranını temizler.

Feed ekranını doldur

Adım adım yol tarifi hizmetinizi oluşturdunuz. Bu bölümde, adım adım yol tarifi feed'i için yol tarifi kartlarını doldurmak üzere kullanabileceğiniz görsel ve metin öğeleri açıklanmaktadır.

30 metre sonra W Ahwanee Ave.&#39;ye sola döneceğinizi gösteren bir mobil ekran. Ekranın alt kısmında, hedefe kalan süre 46 dakika, kalan mesafe ise 63 kilometredir.

Kullanıcı rehberli navigasyona girdiğinde, üstte Gezinme SDK'sından doldurulan gezinme verilerini 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ı için alanlar Genel geziyle ilgili alanlar
Bulunduğu yer: StepInfo Bulunduğu yer: NavInfo
Yolun tam adı Kalan süre
Manevra simgesi Hedefe olan mesafe
Sonraki adıma olan 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 nesnelerinin bir listesini içerir.

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

Kullanıcının bir şeritte gitmesi gereken önerilen yön, isRecommended alanıyla işaretlenir.

Şerit yardımı örneği

Aşağıdaki snippet, yukarıda görüntülenen şeritlerin veri temsilini göstermektedir.

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

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

Manevralar için simgeler oluşturma

Maneuver sınıflandırması, gezinme sırasında gerçekleşebilecek her manevrayı tanımlar ve belirli bir adıma ait manevrayı StepInfo.getManeuver() yönteminden alabilirsiniz.

Manevra simgeleri oluşturmanız ve bunları ilişkili manevralarla eşlemeniz gerekir. 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 her ikisi de sola dönüş simgesiyle eşlenebilir.

Bazı manevralar, SDK'nın bir ülkenin sürüş tarafına 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, oluşturulan simgelerin küçük bir listesi.

Navigasyon SDK'sı, Android Auto kullanım alanlarını kolaylaştırmak için manevra ve şerit kılavuzu 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 dokümanlarında setsLaneImage ve CarIcon özelliklerine 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?