Feed data belokan demi belokan memberikan informasi khusus navigasi untuk perangkat yang tidak didesain untuk panduan navigasi berbasis peta. memberikan manuver yang akan datang dengan elemen yang Anda berikan:
- ikon (kiri, kanan, putar U)
- putar angka dalam putaran
- nama jalan
- perkiraan jarak dan waktu ke langkah navigasi berikutnya atau langkah akhir tujuan
Anda dapat menggunakan feed belokan demi belokan untuk membuat pengalaman UI Navigation SDK tidak sesuai, seperti untuk Android Auto atau untuk layar akan menampilkan tempat stack Android lengkap tidak tersedia. Sebagai contoh, Anda mungkin menggunakan ini untuk pengemudi kendaraan roda dua, di mana Anda dapat memproyeksikan panduan khusus navigasi untuk membantu mereka mencapai tujuan dengan lebih cepat dan lainnya dengan percaya diri dengan sedikit gangguan.
Untuk menggunakan SDK, Anda akan membuat layanan dan mendaftarkannya pada Navigation SDK untuk Android agar dapat menerima informasi navigasi baru secara real time (sekitar satu detik saat navigasi).
Dokumen ini menunjukkan cara membuat dan mendaftarkan layanan navigasi yang menerima informasi navigasi dari SDK dan memberikan status navigasi ke perangkat penerima.
Ringkasan
Bagian ini menjelaskan cara menambahkan library TurnByTurn ke project Anda dan merangkum alur tingkat tinggi untuk membangun fungsionalitas belokan demi belokan.
Menambahkan library TurnByTurn ke project Anda menggunakan Maven (direkomendasikan)
Untuk menggunakan library TurnByTurn versi mandiri, ikuti langkah-langkah berikut:
- Siapkan lingkungan Anda untuk mengakses repositori Maven host:
Maven
Tambahkan baris berikut ke file
pom.xml
Anda:<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
Gradle
Tambahkan baris berikut ke file
build.gradle
Anda:repositories { ... google() }
Tambahkan dependensi berikut ke konfigurasi Maven atau Gradle Anda:
-
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' }
Menambahkan library TurnByTurn ke project Anda menggunakan file JAR yang didownload (alternatif)
Library TurnByTurn tersedia sebagai file JAR di folder SDK ini. Jika Anda tidak memiliki akses, hubungi perwakilan Anda.
- Download dan ekstrak file
google_turnbyturn_*.jar
. - Salin file JAR yang didownload ke direktori
app/libs
project Anda. Tambahkan kode berikut ke
build.gradle
untuk menyertakan JAR dalam build Anda.dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
Menggunakan Library TurnByTurn
Berikut adalah langkah-langkah tingkat tinggi untuk mengaktifkan fungsi belokan demi belokan. Tujuan berikut ini memberikan detail tentang setiap langkah.
Membuat layanan untuk menerima update navigasi
Navigation SDK terikat ke layanan TurnByTurn Anda dan mengirimkan pembaruan navigasi melalui aplikasi Android Messenger kami. Anda dapat membuat layanan navigasi baru untuk pembaruan ini, atau menggunakan layanan.
Keuntungan menggunakan layanan untuk menerima pembaruan navigasi adalah bahwa layanan dapat berada di proses latar belakang yang terpisah.
Layanan dalam contoh berikut menerima informasi navigasi dan menggunakan
TurnByTurnManager
untuk mengonversi data menjadi objek NavInfo
yang
berisi detail navigasi.
/** * 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())); }
Kode pesan
NavInfo
pesan dapat diidentifikasi melalui
Message.what
dari class Message
yang disetel ke nilai
TurnByTurnManager.MSG_NAV_INFO
.
Mendaftarkan layanan untuk update navigasi
Cuplikan kode berikut mendaftarkan layanan navigasi.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
Memulai dan menghentikan layanan
Layanan navigasi akan aktif selama
Navigation SDK akan terikat padanya. Anda dapat memanggil secara manual
startService()
dan stopService()
untuk mengontrol masa pakai layanan navigasi
siklus proses, tetapi ketika Anda mendaftarkan layanan ke
Navigation SDK, layanan Anda akan dimulai secara otomatis, dan
hanya berhenti ketika
Anda membatalkan pendaftarannya. Bergantung pada cara Anda menyiapkan aplikasi, Anda mungkin
ingin mempertimbangkan memulai layanan latar depan, dijelaskan dalam
dokumentasi Layanan
ringkasan.
Membatalkan pendaftaran layanan
Untuk berhenti menerima update navigasi, batalkan pendaftaran layanan dari Navigation SDK.
navigator.unregisterServiceForNavUpdates();
Memahami status navigasi
Gunakan NavInfo.getNavState()
untuk mendapatkan status navigasi saat ini, yaitu salah satunya
dari yang berikut ini:
Enroute - Status
ENROUTE
berarti bahwa navigasi terpandu saat ini aktif dan pengguna berada di rute yang disediakan. Informasi tentang langkah manuver yang akan datang tersedia.Pengubahan rute -
REROUTING
berarti navigasi sedang berlangsung, tetapi navigator mencari rute baru. Langkah manuver yang akan datang tidak tersedia, karena belum ada rute baru. Pada aplikasi contoh, pesan "Pengubahan rute..." pesan muncul di tampilan info navigasi. Setelah rute ditemukan, pesanNavInfo
akan dikirim dengan statusENROUTE
.Dihentikan -
STOPPED
berarti navigasi telah berakhir. Misalnya, navigasi berhenti saat pengguna keluar dari navigasi di aplikasi. Di aplikasi contoh, StatusSTOPPED
menghapus tampilan info navigasi untuk mencegah langkah yang berlama-lama petunjuk ditampilkan.
Mengisi tampilan feed
Setelah menyiapkan layanan belokan demi belokan, bagian ini membahas elemen visual dan teks yang dapat Anda gunakan untuk mengisi kartu panduan untuk feed belokan demi belokan.
Kolom informasi kartu navigasi
Saat pengguna memasuki navigasi terpandu, kartu navigasi akan muncul di bagian atas, yang berisi data navigasi yang diisi dari Navigation SDK. Gambar terkait menunjukkan contoh elemen-elemen navigasi yang penting ini.
Tabel ini menunjukkan kolom untuk info navigasi dan tempat Anda menemukannya.
Kolom untuk setiap langkah navigasi | Kolom untuk perjalanan secara keseluruhan |
---|---|
Ditemukan di StepInfo |
Ditemukan di NavInfo |
Nama lengkap jalan | Sisa waktu |
Ikon manuver | Jarak ke tujuan |
Jarak ke langkah berikutnya | |
Kolom panduan jalur |
Panduan jalur
Navigation SDK mewakili jalur di navigasi
ganti kartu sebagai
Jalur
dan
LaneDirection
objek data. Objek Lane
mewakili lajur tertentu selama navigasi dan
memiliki daftar objek LaneDirection
yang menjelaskan semua belokan yang dapat
melalui jalur ini.
Arah yang direkomendasikan yang harus diambil pengguna pada suatu lajur ditandai dengan isRecommended kolom tersebut.
Contoh panduan jalur
Cuplikan berikut mengilustrasikan representasi data dari lajur yang ditampilkan di atas.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
Membuat ikon untuk manuver
Tujuan
Maneuver
enum mendefinisikan setiap kemungkinan manuver yang bisa terjadi saat menavigasi, dan Anda
bisa mendapatkan manuver untuk langkah tertentu dari metode StepInfo.getManeuver()
.
Anda harus membuat ikon manuver dan memasangkannya dengan manuver terkait.
Untuk beberapa manuver, Anda dapat menyiapkan pemetaan one-to-one pada ikon, seperti
DESTINATION_LEFT
dan DESTINATION_RIGHT
. Namun, karena beberapa manuver
serupa, Anda mungkin ingin memetakan
lebih dari satu manuver ke satu ikon. Sebagai
contoh TURN_LEFT
dan ON_RAMP_LEFT
dapat dipetakan ke ikon belokan kiri.
Beberapa manuver berisi
label clockwise
atau counterclockwise
tambahan,
yang ditentukan SDK berdasarkan sisi mengemudi suatu negara. Misalnya, di
negara yang mengemudi di sisi kiri jalan, pengemudi mengambil
putaran atau putar U searah jarum jam, sedangkan di sisi kanan jalan
negara berlawanan arah jarum jam. Navigation SDK mendeteksi
apakah manuver terjadi di lalu lintas
sisi kiri atau kanan dan menghasilkan
manuver yang tepat. Oleh karena itu, ikon manuver
Anda mungkin berbeda untuk
searah jarum jam versus manuver berlawanan arah jarum jam.
Luaskan untuk melihat ikon contoh berbagai manuver
Ikon Contoh | Manuver TurnByTurn |
---|---|
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
|
Menggunakan ikon yang dibuat
Untuk memfasilitasi kasus penggunaan Android Auto, Navigation SDK mendukung pembuatan manuver dan jalur ikon panduan. Ikon-ikon ini sesuai dengan panduan ukuran gambar Android Auto Library Aplikasi Mobil yang merekomendasikan penargetan kotak pembatas 500 x 74 dp. Lihat setsLaneImage dan CarIcon di dokumentasi referensi Android untuk detailnya.
Contoh pembuatan ikon
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
Setelah Anda mengaktifkan pembuatan ikon, objek StepInfo
TurnbyTurn akan mengisi
Kolom maneuverBitmap dan lanesBitmap dengan ikon.
Langkah berikutnya
- Untuk aplikasi Android Auto: