Feed data belokan demi belokan memberikan informasi khusus navigasi ke perangkat yang tidak dirancang untuk panduan navigasi berbasis peta. Memberikan manuver mendatang dengan elemen yang Anda sediakan:
- ikon (kiri, kanan, putar balik)
- putar angka dalam bundaran
- nama jalan
- perkiraan jarak dan waktu untuk langkah navigasi berikutnya atau tujuan akhir
Anda dapat menggunakan feed belokan demi belokan untuk membuat pengalaman jika UI Navigation SDK lengkap tidak sesuai, seperti untuk Android Auto atau untuk tampilan layar kecil tempat stack Android lengkap tidak tersedia. Misalnya, Anda dapat menggunakannya untuk penumpang kendaraan roda dua, tempat Anda dapat memproyeksikan panduan khusus navigasi untuk membantu mereka mencapai tujuan dengan lebih cepat dan lebih percaya diri dengan sedikit gangguan.
Untuk menggunakan SDK, Anda harus membuat layanan dan mendaftarkannya ke Navigation SDK untuk Android agar dapat menerima informasi navigasi baru secara real time (sekitar sekali per detik selama 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 dan meringkas alur tingkat tinggi untuk membangun fungsi belokan demi belokan.
Tambahkan 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 seperti yang dijelaskan dalam Memulai Driver SDK dalam Dokumentasi Perjalanan dan Pesanan.
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' }
Tambahkan library TurnByTurn ke project Anda menggunakan file JAR yang telah 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 langkah-langkah tingkat tinggi untuk mengaktifkan fungsi belokan demi belokan. Bagian berikutnya memberikan detail tentang setiap langkah.
Membuat layanan untuk menerima update navigasi {#service}
Navigation SDK mengikat ke layanan TurnByTurn Anda dan mengirimkannya melalui Android Messenger. Anda dapat membuat layanan navigasi baru untuk update ini, atau menggunakan layanan yang sudah ada.
Manfaat penggunaan layanan untuk menerima update navigasi adalah layanan dapat berada dalam 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
Pesan NavInfo
dapat diidentifikasi melalui kolom Message.what dari class Message
yang ditetapkan ke nilai TurnByTurnManager.MSG_NAV_INFO
.
Mendaftarkan layanan untuk update navigasi {#register}
Cuplikan kode berikut mendaftarkan layanan navigasi.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
Memulai dan menghentikan layanan
Layanan navigasi aktif selama
Navigation SDK mengikatnya. Anda dapat memanggil
startService()
dan stopService()
secara manual untuk mengontrol siklus proses
layanan navigasi, tetapi saat Anda mendaftarkan layanan dengan
Navigation SDK, layanan akan dimulai secara otomatis dan
hanya berhenti saat pendaftarannya dibatalkan. Bergantung pada cara Anda menyiapkan aplikasi, sebaiknya
pertimbangkan untuk memulai layanan latar depan, yang dijelaskan dalam
Ringkasan layanan
dokumentasi Android.
Membatalkan pendaftaran layanan
Untuk berhenti menerima update navigasi, batalkan pendaftaran layanan dari Navigation SDK.
navigator.unregisterServiceForNavUpdates();
Memahami status navigasi {#states}
Gunakan NavInfo.getNavState()
untuk mendapatkan status navigasi saat ini, yang merupakan salah satu
dari berikut ini:
Enroute - Status
ENROUTE
berarti navigasi yang dipandu saat ini aktif dan pengguna berada di rute yang disediakan. Informasi tentang langkah manuver mendatang saat ini tersedia.Perubahan rute -
REROUTING
berarti navigasi sedang berlangsung, tetapi navigator mencari rute baru. Langkah manuver mendatang tidak tersedia, karena belum ada rute baru. Pada contoh aplikasi, pesan “Pengubahan rute...” akan muncul dalam tampilan info navigasi. Setelah rute ditemukan, pesanNavInfo
dikirim dengan statusENROUTE
.Berhenti -
STOPPED
berarti navigasi telah berakhir. Misalnya, navigasi akan berhenti saat pengguna keluar dari navigasi di aplikasi. Dalam aplikasi contoh, statusSTOPPED
akan menghapus tampilan info navigasi untuk mencegah petunjuk langkah yang masih ada 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 pengemudi memasuki navigasi terpandu, kartu navigasi akan muncul di bagian atas, yang berisi tanggal navigasi yang diisi dari Navigation SDK. Gambar terkait menunjukkan contoh elemen navigasi penting tersebut.
Tabel ini menampilkan {i>field<i} untuk info navigasi dan tempat Anda menemukannya.
Kolom untuk setiap langkah navigasi | Kolom untuk keseluruhan perjalanan |
---|---|
Ditemukan di StepInfo |
Ditemukan di NavInfo |
Nama jalan lengkap | Sisa waktu |
Ikon manuver | Jarak ke tujuan |
Jarak ke langkah berikutnya | |
Kolom panduan jalur |
Panduan jalur
Navigation SDK menampilkan jalur di kartu belokan navigasi sebagai objek data Lane dan LaneDirection. Objek Lane
mewakili jalur tertentu selama navigasi dan memiliki daftar objek LaneDirection
yang menjelaskan semua belokan yang dapat dilakukan dari jalur ini.
Rute yang direkomendasikan yang harus diambil pengemudi di jalur ditandai melalui kolom isRecommended.
Contoh panduan jalur
Cuplikan berikut mengilustrasikan representasi data jalur 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
Enum
Maneuver
menentukan setiap kemungkinan manuver yang dapat terjadi saat bernavigasi, dan Anda
dapat memperoleh 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 ke ikon, seperti
DESTINATION_LEFT
dan DESTINATION_RIGHT
. Namun, karena beberapa manuver mirip, Anda mungkin ingin memetakan lebih dari satu manuver ke satu ikon. Misalnya,
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 tempat mengemudi berada di sisi kiri jalan, pengemudi mengambil belokan atau putar balik searah jarum jam, sedangkan negara yang mengemudi di sisi kanan jalan searah jarum jam. Navigation SDK mendeteksi apakah manuver terjadi dalam lalu lintas sisi kiri atau kanan dan menghasilkan manuver yang sesuai. Oleh karena itu, ikon manuver Anda mungkin berbeda untuk manuver searah jarum jam dan berlawanan arah jarum jam.
Luaskan untuk melihat contoh ikon dalam berbagai manuver
Ikon Contoh | Manuver Berputar Putar |
---|---|
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 ikon panduan manuver dan jalur. Ikon-ikon ini sesuai dengan panduan ukuran gambar dari library Aplikasi Mobil Android Auto yang merekomendasikan untuk menargetkan kotak pembatas 500 x 74 dp. Lihat setsLaneImage dan CarIcon dalam dokumentasi referensi Android untuk mengetahui 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 tersebut.
Langkah selanjutnya
- Untuk aplikasi Android Auto: