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ç sürücüleri için bu özellikten yararlanabilirsiniz. Sürücülerin minimum dikkat dağınıklığıyla hedeflerine daha hızlı ve daha güvenli bir şekilde ulaşması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.
Maven kullanarak TurnByTurn kitaplığını projenize ekleyin (önerilir)
TurnByTurn kitaplığının bağımsız bir sürümünü kullanmak için aşağıdaki adımları uygulayın:
- 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() }
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.
google_turnbyturn_*.jar
dosyasını indirip sıkıştırılmış dosyayı açın.- İndirilen JAR dosyasını projenizin
app/libs
dizinine kopyalayın. 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.
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ü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.
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
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
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, navigasyon bilgileri ekranında "Yeni rota belirleniyor..." mesajı görünür. Bir rota bulunduğundaENROUTE
durumunu içeren birNavInfo
mesajı gönderilir.Durduruldu:
STOPPED
gezinmenin sona erdiği anlamına gelir. Örneğin, kullanıcı uygulamada gezinmeden çıktığında gezinme durur. Örnek uygulamadaSTOPPED
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.
Gezinme kartı bilgi alanları
Kullanıcı rehberli gezinmeye girdiğinde üst kısımda, 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ı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
nesnelerinin bir listesini içerir.
Kullanıcıların bir şeritte izlemesi gereken önerilen yön, isRecommended alanında 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ş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
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?
- Android Auto uygulamaları için: