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.
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 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.
google_turnbyturn_*.jar
dosyasını indirip arşivden çıkarın.- İndirilen JAR dosyasını projenizin
app/libs
dizinine kopyalayın. 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.
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 sonraENROUTE
durumunu içeren birNavInfo
mesajı gönderilir.Durduruldu:
STOPPED
, navigasyonun sona erdiğini gösterir. Ö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 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.
Gezinme kartı bilgi alanları
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.
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
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?
- Android Auto uygulamaları için: