Aktifkan feed data belokan demi belokan

Feed data belokan demi belokan memberikan informasi khusus navigasi ke perangkat yang tidak dirancang untuk panduan navigasi berbasis peta. Fungsi ini menyediakan manuver mendatang dengan elemen yang Anda berikan:

  • ikon (kiri, kanan, U-turn)
  • nomor belokan di bundaran
  • nama jalan
  • perkiraan jarak dan waktu ke langkah navigasi berikutnya atau tujuan akhir

Anda dapat menggunakan feed belokan demi belokan untuk membuat pengalaman saat UI Navigation SDK lengkap tidak sesuai, seperti untuk Android Auto atau untuk layar kecil tempat stack Android lengkap tidak tersedia. Misalnya, Anda dapat menggunakannya untuk pengemudi kendaraan roda dua, tempat Anda dapat memproyeksikan panduan khusus navigasi untuk membantu mereka mencapai tujuan lebih cepat dan lebih yakin dengan gangguan minimal.

Untuk menggunakan SDK, Anda akan membuat layanan dan mendaftarkannya dengan Navigation SDK for 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 Anda dan menyampulkan alur tingkat tinggi untuk mem-build fungsi belokan demi belokan.

Untuk menggunakan versi mandiri library TurnByTurn, ikuti langkah-langkah berikut:

  1. 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()
    }
        
  2. 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.

  1. Download dan ekstrak google_turnbyturn_*.jar.
  2. Salin file JAR yang didownload ke direktori app/libs project Anda.
  3. 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 navigasi belokan demi belokan. Bagian berikut memberikan detail tentang setiap langkah.

  1. Buat layanan untuk menerima update navigasi.

  2. Daftarkan layanan.

  3. Memahami status navigasi.

Membuat layanan untuk menerima update navigasi

Navigation SDK terikat dengan layanan TurnByTurn Anda dan mengirimkan update navigasi melalui Android Messenger . Anda dapat membuat layanan navigasi baru untuk update ini, atau menggunakan layanan yang sudah ada.

Manfaat menggunakan layanan untuk menerima update navigasi adalah layanan dapat berjalan dalam proses latar belakang 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 pembaruan navigasi

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 terikat dengannya. Anda dapat memanggil startService() dan stopService() secara manual untuk mengontrol siklus proses layanan navigasi, tetapi saat mendaftarkan layanan dengan Navigation SDK, layanan Anda akan otomatis dimulai, dan hanya berhenti saat Anda membatalkan pendaftarannya. Bergantung pada cara menyiapkan aplikasi, Anda dapat mempertimbangkan 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

Gunakan NavInfo.getNavState() untuk mendapatkan status navigasi saat ini, yang merupakan salah satu dari berikut:

  • Dalam perjalanan - Status ENROUTE berarti navigasi terpandu 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 sedang mencari rute baru. Langkah manuver mendatang tidak tersedia, karena belum ada rute baru. Di aplikasi contoh, pesan "Menetapkan rute ulang..." muncul di layar info navigasi. Setelah rute ditemukan, pesan NavInfo akan dikirim dengan status ENROUTE.

  • Dihentikan - STOPPED berarti navigasi telah berakhir. Misalnya, navigasi berhenti saat pengguna keluar dari navigasi di aplikasi. Dalam aplikasi contoh, status STOPPED menghapus tampilan info navigasi untuk mencegah petunjuk langkah yang tertunda ditampilkan.

Mengisi tampilan feed

Setelah Anda 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.

Layar seluler yang menampilkan belokan kiri yang akan datang dalam jarak 30 meter ke W Ahwanee
Ave. Di bagian bawah layar, waktu yang tersisa untuk mencapai tujuan adalah 46 menit,
dan jarak yang tersisa adalah 39
mil.

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 navigasi penting ini.

Tabel ini menampilkan kolom 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 merepresentasikan 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 dibuat dari jalur ini.

Contoh konfigurasi panduan jalan.

Arah yang direkomendasikan yang harus diambil pengguna di jalur ditandai oleh 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 menavigasi, dan Anda dapat 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 satu-ke-satu 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 belok kiri.

Beberapa manuver berisi label clockwise atau counterclockwise tambahan, yang ditentukan SDK berdasarkan sisi mengemudi di suatu negara. Misalnya, di negara yang berkendara di sisi kiri jalan, pengemudi mengambil lingkaran lalu lintas atau putar balik searah jarum jam, sedangkan negara yang berkendara di sisi kanan jalan akan berputar searah jarum jam. Navigation SDK mendeteksi apakah manuver terjadi di lalu lintas sisi kiri atau kanan dan menghasilkan manuver yang sesuai. Oleh karena itu, ikon manuver Anda mungkin berbeda untuk manuver searah jarum jam versus manuver berlawanan arah jarum jam.

Luaskan untuk melihat contoh ikon untuk 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

Daftar kecil ikon yang dihasilkan yang disediakan oleh Navigation
SDK.

Untuk memfasilitasi kasus penggunaan Android Auto, Navigation SDK mendukung pembuatan ikon panduan manuver dan jalur. Ikon ini sesuai dengan panduan ukuran gambar library Aplikasi Mobil Android Auto yang merekomendasikan untuk menargetkan kotak pembatas 500 x 74 dp. Lihat setsLaneImage dan CarIcon di 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.

Langkah berikutnya