Bật nguồn cấp dữ liệu từng chặng

Nguồn cấp dữ liệu theo từng chặng cung cấp thông tin chỉ điều hướng cho các thiết bị không được thiết kế cho chỉ dẫn chỉ đường dựa trên bản đồ. Chiến dịch này mang đến cho các thao tác sắp tới mà bạn cung cấp:

  • biểu tượng (trái, phải, quay đầu)
  • rẽ số ở đường vòng
  • tên đường
  • khoảng cách và thời gian ước tính đến bước điều hướng tiếp theo hoặc bước cuối cùng điểm đến

Bạn có thể sử dụng nguồn cấp dữ liệu theo từng chặng để tạo ra trải nghiệm Giao diện người dùng SDK điều hướng không phù hợp, chẳng hạn như dành cho Android Auto hoặc dành cho màn hình hiển thị khi không có toàn bộ ngăn xếp Android. Ví dụ: bạn có thể sử dụng tính năng này cho người lái xe hai bánh, trong đó bạn có thể chiếu hướng dẫn chỉ để điều hướng để giúp họ đến đích nhanh hơn và nhiều hơn một cách tự tin mà không bị phân tâm.

Để sử dụng SDK, bạn sẽ tạo một dịch vụ và đăng ký dịch vụ đó bằng SDK điều hướng dành cho Android để có thể nhận thông tin điều hướng mới trong thời gian thực (khoảng một lần một giây trong khi điều hướng).

Tài liệu này hướng dẫn bạn cách tạo và đăng ký dịch vụ chỉ đường nhận thông tin điều hướng từ SDK và cung cấp trạng thái điều hướng đến thiết bị nhận.

Tổng quan

Phần này mô tả cách thêm thư viện TurnByTurn vào các dự án của bạn và tóm tắt quy trình cấp cao để xây dựng chức năng theo từng chặng.

Để sử dụng phiên bản độc lập của thư viện TurnByTurn, hãy làm theo các bước sau:

  1. Thiết lập môi trường để truy cập vào kho lưu trữ Maven của máy chủ:

    Maven

    Thêm đoạn mã sau vào tệp pom.xml của bạn:

        <project>
          ...
          <repositories>
            <repository>
              <id>google-maven-repository</id>
              <url>https://maven.google.com</url>
            </repository>
          </repositories>
          ...
        </project>
        
        

    Gradle

    Thêm đoạn mã sau vào tệp build.gradle của bạn:

    repositories {
        ...
        google()
    }
        
  2. Thêm phần phụ thuộc sau vào cấu hình Maven hoặc Gradle:
  3. 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'
    }
        

Thêm thư viện TurnByTurn vào dự án của bạn bằng tệp JAR đã tải xuống (phiên bản thay thế)

Thư việnTurnByTurn được cung cấp dưới dạng tệp JAR trong thư mục SDK này. Nếu bạn không có quyền truy cập, hãy liên hệ với người đại diện của bạn.

  1. Tải google_turnbyturn_*.jar xuống và giải nén.
  2. Sao chép tệp JAR đã tải xuống vào thư mục app/libs của dự án.
  3. Thêm đoạn mã sau vào build.gradle để đưa tệp JAR vào bản dựng của bạn.

    dependencies {
       ...
       api fileTree(include: ['*.jar'], dir: 'libs')
    }
    

Sử dụng Thư viện TurnByTurn

Dưới đây là các bước nâng cao để bật chức năng theo từng chặng. Chiến lược phát hành đĩa đơn phần tiếp theo cung cấp thông tin chi tiết về từng bước.

  1. Tạo một dịch vụ để nhận thông tin cập nhật về lộ trình di chuyển.

  2. Đăng ký dịch vụ.

  3. Tìm hiểu về các trạng thái điều hướng.

  4. Xem ví dụ về màn hình điều hướng hiển thị các phần tử thiết yếu.

Tạo một dịch vụ để nhận thông tin cập nhật về lộ trình di chuyển

SDK điều hướng liên kết với dịch vụ TurnByTurn của bạn và gửi cho nó các bản cập nhật điều hướng thông qua Android Messenger của Google. Bạn có thể tạo dịch vụ điều hướng mới cho các nội dung cập nhật này hoặc sử dụng .

Lợi ích của việc sử dụng một dịch vụ để nhận thông tin cập nhật về lộ trình di chuyển là dịch vụ đó có thể tồn tại trong một tiến trình nền riêng biệt.

Dịch vụ trong ví dụ sau đây nhận thông tin chỉ đường và sử dụng TurnByTurnManager để chuyển đổi dữ liệu thành đối tượng NavInfo chứa thông tin chi tiết về điều hướng.

/**
 *   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()));
}

Mã tin nhắn

Có thể xác định NavInfo tin nhắn thông qua Message.what của lớp Message, được đặt thành giá trị của TurnByTurnManager.MSG_NAV_INFO.

Đăng ký dịch vụ để cập nhật thông tin chỉ đường

Các đoạn mã sau đây đăng ký dịch vụ điều hướng.

boolean isNavInfoReceivingServiceRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);

Khởi động và dừng dịch vụ

Dịch vụ điều hướng sẽ hoạt động miễn là SDK điều hướng liên kết với SDK đó. Bạn có thể gọi theo cách thủ công startService()stopService() để kiểm soát tuổi thọ của dịch vụ chỉ đường chu kỳ, nhưng khi bạn đăng ký dịch vụ của mình với SDK điều hướng, dịch vụ của bạn sẽ tự động khởi động và chỉ dừng khi bạn huỷ đăng ký. Tuỳ thuộc vào cách thiết lập ứng dụng, bạn có thể muốn cân nhắc việc bắt đầu một dịch vụ trên nền trước, theo mô tả trong tài liệu Dịch vụ tổng quan.

Đang huỷ đăng ký dịch vụ

Để ngừng nhận thông tin cập nhật về lộ trình di chuyển, hãy huỷ đăng ký dịch vụ khỏi SDK điều hướng.

navigator.unregisterServiceForNavUpdates();

Tìm hiểu về các trạng thái điều hướng

Sử dụng NavInfo.getNavState() để nhận trạng thái điều hướng hiện tại, là một trong số sau:

  • Đang lộ trình - Trạng thái ENROUTE có nghĩa là tính năng chỉ đường có hướng dẫn hiện đang đang hoạt động và người dùng đang đi theo tuyến được cung cấp. Thông tin về có bước hướng dẫn sắp tới.

  • Đang định tuyến lại - REROUTING có nghĩa là quá trình điều hướng đang diễn ra, nhưng trình điều hướng đang tìm một tuyến đường mới. Bước thao tác sắp tới không phải là khả dụng, vì chưa có tuyến đường mới. Trong ứng dụng mẫu, lỗi "Đang định tuyến lại..." thông báo xuất hiện trong màn hình thông tin đi theo chỉ dẫn. Sau khi tìm thấy một tuyến đường, thông báo NavInfo sẽ được được gửi với trạng thái ENROUTE.

  • Đã dừngSTOPPED có nghĩa là quá trình di chuyển đã kết thúc. Ví dụ: điều hướng dừng khi người dùng thoát khỏi tính năng điều hướng trong ứng dụng. Trong ứng dụng mẫu, một Trạng thái STOPPED xoá màn hình thông tin đi theo chỉ dẫn để ngăn bước đi bị kéo dài hiển thị hướng dẫn.

Điền sẵn màn hình của nguồn cấp dữ liệu

Giờ đây, khi bạn đã thiết lập dịch vụ từng chặng, phần này đề cập đến mà bạn có thể sử dụng để điền thẻ hướng dẫn cho nguồn cấp dữ liệu từng chặng.

Một màn hình thiết bị di động hiển thị ngã rẽ trái sắp tới ở độ cao 30 mét trên đường W Ahwanee
A. Ở cuối màn hình, thời gian còn lại để đến đích là 46 phút,
và quãng đường còn lại là 39
dặm.

Khi người dùng truy cập vào chế độ chỉ đường có hướng dẫn, một thẻ điều hướng sẽ xuất hiện ở trên cùng, chứa dữ liệu điều hướng được điền từ SDK điều hướng. Hình ảnh có liên quan cho thấy một ví dụ về các phần tử điều hướng thiết yếu này.

Bảng này hiển thị các trường dành cho thông tin đi theo chỉ dẫn và nơi bạn tìm thấy các trường đó.

Các trường cho mỗi bước điều hướng Các trường cho thông tin tổng thể của chuyến đi
Tìm thấy ở StepInfo Tìm thấy ở NavInfo
Tên đầy đủ của đường Thời gian còn lại
Biểu tượng cơ động Khoảng cách tới điểm đến
Khoảng cách đến bước tiếp theo
Trường hướng dẫn làn đường

Hướng dẫn làn đường

SDK điều hướng biểu thị các làn đường trong điều hướng CANNOT TRANSLATE Làn đườngLaneDirection các đối tượng dữ liệu. Đối tượng Lane đại diện cho một làn đường cụ thể trong khi đi theo chỉ dẫn và có danh sách đối tượng LaneDirection mô tả tất cả các ngã rẽ có thể được tạo từ làn đường này.

Hướng dẫn làn đường mẫu
.

Chỉ đường được đề xuất mà người dùng nên đi trong làn đường được đánh dấu bằng isRecommended .

Ví dụ về hướng dẫn làn đường

Đoạn mã sau minh hoạ cách biểu diễn dữ liệu của các làn đường được hiển thị ở trên.

// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
                  {/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]

// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]

Tạo biểu tượng cho các thao tác

Chiến lược phát hành đĩa đơn Maneuver enum xác định từng thao tác có thể xảy ra trong khi điều hướng và bạn có thể lấy thao tác cho một bước nhất định từ phương thức StepInfo.getManeuver().

Bạn phải tạo biểu tượng thao tác và ghép chúng với các thao tác liên quan. Đối với một số thao tác, bạn có thể thiết lập mối liên kết 1-1 với biểu tượng, chẳng hạn như DESTINATION_LEFTDESTINATION_RIGHT. Tuy nhiên, vì một số thao tác tương tự, bạn nên ánh xạ nhiều thao tác với một biểu tượng. Để ví dụ: TURN_LEFTON_RAMP_LEFT đều có thể ánh xạ tới biểu tượng rẽ trái.

Một số thao tác có chứa nhãn clockwise hoặc counterclockwise bổ sung, mà SDK xác định dựa vào khía cạnh lái xe của một quốc gia. Ví dụ: trong quốc gia nơi lái xe ở bên trái đường, người lái xe sẽ quay vòng hoặc quay đầu theo chiều kim đồng hồ, ngược lại là bên phải đường các quốc gia theo chiều kim đồng hồ. SDK điều hướng phát hiện liệu một thao tác có xảy ra trong lưu lượng truy cập bên trái hay bên phải hay không và xuất ra thao tác phù hợp. Do đó, biểu tượng điều khiển có thể khác đối với thao tác theo chiều kim đồng hồ so với thao tác ngược chiều kim đồng hồ.

Mở rộng để xem biểu tượng ví dụ cho các thao tác

Biểu tượng mẫu Thao tác rẽ
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

Sử dụng các biểu tượng đã tạo

Một danh sách nhỏ các biểu tượng đã tạo do thành phần Điều hướng cung cấp
SDK.

Để hỗ trợ các trường hợp sử dụng Android Auto, SDK điều hướng hỗ trợ tạo điều khiển và làn đường biểu tượng hướng dẫn. Các biểu tượng này phù hợp với hướng dẫn định cỡ hình ảnh của Android Auto Thư viện Ứng dụng cho ô tô đề xuất nhắm đến hộp giới hạn 500 x 74 dp. Xem setsLaneImageCarIcon trong tài liệu tham khảo của Android để biết thông tin chi tiết.

Ví dụ về cách tạo biểu tượng

NavigationUpdatesOptions options =
  NavigationUpdatesOptions.builder()
             .setNumNextStepsToPreview(numNextStepsToPreview)
             .setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
             .setDisplayMetrics(getResources().getDisplayMetrics())
             .build();
boolean isRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(),
              NavInfoReceivingService.class.getName(),
              options);

Sau khi bạn bật tính năng tạo biểu tượng, đối tượng TurnbyTurn StepInfo sẽ điền vào Các trường maneuverBitmaplanesBitmap kèm theo các biểu tượng.

Các bước tiếp theo