Nguồn cấp dữ liệu từng chặng cung cấp thông tin chỉ dùng để chỉ đường cho các thiết bị không được thiết kế cho hướng dẫn chỉ đường dựa trên bản đồ. Công cụ này cung cấp các thao tác sắp tới với các phần tử 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 đích đến cuối cùng
Bạn có thể sử dụng nguồn cấp dữ liệu từng chặng để tạo trải nghiệm mà giao diện người dùng SDK Điều hướng đầy đủ không phù hợp, chẳng hạn như cho Android Auto hoặc cho màn hình màn hình nhỏ khi không có ngăn xếp Android đầy đủ. 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ể đưa ra hướng dẫn chỉ dùng để chỉ đường giúp họ đến điểm đến nhanh hơn và tự tin hơn 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ụ đó với SDK điều hướng dành cho Android để dịch vụ đó có thể nhận thông tin chỉ đường mới theo thời gian thực (khoảng một lần mỗi giây trong quá trình điều hướng).
Tài liệu này chỉ cho bạn cách tạo và đăng ký dịch vụ chỉ đường nhận thông tin chỉ đường từ SDK và cung cấp trạng thái điều hướng cho thiết bị nhận.
Tổng quan
Phần này mô tả cách thêm thư viện TurnByTurn vào 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.
Thêm thư viện TurnByTurn vào dự án của bạn bằng Maven (nên dù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:
- 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() }
Thêm phần phụ thuộc sau vào cấu hình Maven hoặc Gradle:
-
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.
- Tải
google_turnbyturn_*.jar
xuống và giải nén. - Sao chép tệp JAR đã tải xuống vào thư mục
app/libs
của dự án. 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. Các phần tiếp theo sẽ cung cấp thông tin chi tiết về từng bước.
Tạo một dịch vụ để nhận thông tin cập nhật về lộ trình di chuyển.
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 thông tin cập nhật điều hướng cho dịch vụ này thông qua Android Messenger. Bạn có thể tạo một 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 một dịch vụ hiện có.
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ề chỉ đường là dịch vụ đó có thể hoạt động trong một quy 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 đ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
Bạn có thể xác định thông báo NavInfo
thông qua trường Message.what của lớp Message
, được đặt thành giá trị là 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ụ chỉ đường sẽ hoạt động, miễn là SDK điều hướng liên kết với dịch vụ đó. Bạn có thể gọi startService()
và stopService()
theo cách thủ công để kiểm soát vòng đời dịch vụ điều hướng. Tuy nhiên, khi bạn đăng ký dịch vụ của mình bằng SDK điều hướng, dịch vụ của bạn sẽ tự động bắt đầu 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 nên cân nhắc việc bắt đầu một dịch vụ trên nền trước, như mô tả trong phần Tổng quan về dịch vụ trong tài liệu Android.
Đang huỷ đăng ký dịch vụ
Để ngừng nhận các bản cập nhật tính năng chỉ đường, 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 các trạng thái sau:
Đang hoạt động – Trạng thái
ENROUTE
có nghĩa là tính năng điều hướng có hướng dẫn hiện đang hoạt động và người dùng đang đi theo tuyến đường được cung cấp. Thông tin về bước thao tác sắp tới hiện đã có sẵn.Đ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 có sẵn vì chưa có tuyến đường mới. Trong ứng dụng mẫu, thông báo "Đang định tuyến lại..." sẽ xuất hiện trên màn hình thông tin chỉ đường. Sau khi tìm thấy một tuyến, thông báoNavInfo
sẽ được gửi với trạng tháiENROUTE
.Đã dừng –
STOPPED
có nghĩa là quá trình di chuyển đã kết thúc. Ví dụ: tính năng chỉ đường sẽ dừng khi người dùng thoát khỏi tính năng chỉ đường trong ứng dụng. Trong ứng dụng mẫu, trạng tháiSTOPPED
sẽ xoá màn hình thông tin chỉ đường để ngăn việc hiển thị các hướng dẫn còn lại về bước thực hiện.
Điền sẵn màn hình của nguồn cấp dữ liệu
Sau khi thiết lập dịch vụ theo từng chặng, bạn đã hoàn thành phần này về các thành phần hình ảnh và văn bản mà bạn có thể dùng để điền các thẻ hướng dẫn cho nguồn cấp dữ liệu từng chặng.
Trường thông tin về thẻ điều hướng
Khi người dùng chuyển sang chế độ điều hướ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 chỉ đường được điền từ SDK điều hướng. Hình ảnh liên quan cho thấy 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 thẻ rẽ điều hướng dưới dạng các đối tượng dữ liệu Lane và LaneDirection. Đối tượng Lane
đại diện cho một làn đường cụ thể trong quá trình di chuyển và có danh sách các đối tượng LaneDirection
mô tả tất cả các ngã rẽ có thể thực hiện được từ làn đường này.
Hướng được đề xuất mà người dùng nên đi trong một làn đường được đánh dấu bằng trường isRecommended.
Ví dụ về hướng dẫn làn đường
Đoạn mã sau minh hoạ dữ liệu biểu diễn 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
enum Maneuver
xác định từng thao tác có thể xảy ra trong khi điều hướng. Bạn có thể nhận 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 một biểu tượng, chẳng hạn như DESTINATION_LEFT
và DESTINATION_RIGHT
. Tuy nhiên, vì một số thao tác tương tự nhau, nên bạn có thể liên kết nhiều thao tác với một biểu tượng duy nhất. Ví dụ: cả TURN_LEFT
và ON_RAMP_LEFT
đều có thể ánh xạ đến 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 trên khía cạnh lái xe của một quốc gia. Ví dụ: ở những quốc gia 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ồ, trong khi các quốc gia ở phía bên phải đường đi theo chiều kim đồng hồ. SDK điều hướng sẽ phát hiện xem một thao tác diễn ra trong lưu lượng truy cập bên trái hay bên phải và đưa ra thao tác thích hợp. Do đó, biểu tượng thao tác có thể khác nhau đố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
Để tạo điều kiện cho các trường hợp sử dụng Android Auto, SDK điều hướng hỗ trợ việc tạo biểu tượng điều khiển và hướng dẫn làn đường. Các biểu tượng này phù hợp với hướng dẫn định kích thước hình ảnh của thư viện Ứng dụng Android Auto cho Ô tô đề xuất nhắm mục tiêu hộp giới hạn 500 x 74 dp. Xem setsLaneImage và CarIcon trong tài liệu tham khảo 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 StepInfo
TurnbyTurn sẽ điền các trường maneuverBitmap và lanesBitmap bằng các biểu tượng.
Bước tiếp theo
- Đối với ứng dụng Android Auto: