Ý định của Google Maps dành cho Android Automotive

Tuyên bố từ chối trách nhiệm

Sản phẩm/tính năng này sẽ thay đổi và không tuân theo bất kỳ chính sách nào về thoả thuận mức độ cung cấp dịch vụ (SLA) hoặc chính sách về việc ngừng sử dụng. Quy trình triển khai có thể thay đổi trong các bản phát hành sau này.

Về phần mềm mẫu, tệp dữ liệu và/hoặc mã nguồn đi kèm tài liệu này: Sản phẩm này được cung cấp "nguyên trạng" và không được bảo hành dưới bất kỳ hình thức nào và Google rõ ràng từ chối mọi sự đảm bảo, dù rõ ràng, ngụ ý, theo luật định hay theo cách khác, bao gồm nhưng không giới hạn ở việc đảm bảo tính có thể bán được, sự phù hợp với một mục đích cụ thể và việc không vi phạm bất kỳ quyền nào liên quan đến sản phẩm này.


Thông qua ý định của Android Automotive, bạn có thể chạy tính năng chỉ đường trong Google Maps.

Để biết thêm thông tin, hãy xem bài viết Ý định của Google Maps dành cho Android.

Để biết thêm thông tin về cách đưa ứng dụng của bạn lên các xe chạy Android Auto hoặc Android Automotive OS, hãy xem bài viết Android cho Ô tô.

Tổng quan

Trang này mô tả những ý định mà bạn có thể sử dụng với Google Maps dành cho Android Automotive. Để xem tài liệu chi tiết dành cho nhà phát triển Android, hãy đọc:

Yêu cầu ý định

Để chạy Google Maps dành cho Android Automotive bằng ý định, trước tiên bạn phải tạo đối tượng Ý định, chỉ định hành động, URI và gói của đối tượng đó.

  • Hành động. Tất cả ý định trên Google Maps đều được gọi là một Hành động xem, ACTION_VIEW.

  • URI. Ý định của Google Maps sử dụng chuỗi mã hoá URI chỉ định một hành động mong muốn, cùng với một số dữ liệu để thực hiện hành động đó.

  • Gói. Việc gọi setPackage("com.google.android.apps.maps") đảm bảo rằng ứng dụng Google Maps dành cho Android sẽ xử lý Intent. Nếu gói không được thiết lập, hệ thống sẽ xác định ứng dụng nào có thể xử lý Intent. Nếu có nhiều ứng dụng, bạn có thể được hỏi xem bạn muốn sử dụng ứng dụng nào.

Sau khi tạo Ý định, bạn có thể yêu cầu hệ thống chạy ứng dụng liên quan theo một số cách. Một phương thức phổ biến là chuyển Ý định đến phương thức [startActivity()]. Hệ thống sẽ khởi chạy ứng dụng cần thiết (trong trường hợp này là Google Maps) và bắt đầu Hoạt động tương ứng.

// Create a Uri from an intent string. Use the result to create an Intent.
Uri mapIntentUri =
Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
// Create an Intent from mapIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);

Nếu hệ thống không thể xác định một ứng dụng có thể phản hồi Intent, thì ứng dụng của bạn có thể gặp sự cố. Vì lý do này, trước tiên, hãy xác minh rằng ứng dụng nhận được cài đặt trước khi bạn hiển thị một trong các ý định này cho người dùng.

Để xác minh rằng một ứng dụng có thể nhận ý định, hãy gọi [resolveActivity()] trên đối tượng [Intent]. Nếu kết quả không rỗng, thì có ít nhất một ứng dụng có thể xử lý ý định và có thể an toàn gọi [startActivity()]. Nếu kết quả là rỗng, bạn không nên sử dụng ý định và nếu có thể, hãy tắt tính năng gọi ý định.

if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}

Ví dụ: để chạy đường đi từng chặng đến Vườn thú Taronga ở Sydney, bạn có thể sử dụng mã sau:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}

Chuỗi truy vấn được mã hoá URI

Tất cả các chuỗi được chuyển đến Ý định của Google Maps phải được mã hoá URI. Ví dụ: chuỗi "1st & Pike, Seattle" sẽ trở thành 1st%20%26%20Pike%2C%20Seattle. Bạn có thể mã hoá dấu cách trong chuỗi bằng %20 hoặc thay thế bằng dấu cộng (+).

Bạn có thể sử dụng phương thức android.net.Uri parse() để mã hoá các chuỗi của mình. Ví dụ:

Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));

Chạy tính năng đi theo chỉ dẫn từng chặng

Hãy sử dụng ý định này để chạy tính năng chỉ đường của Google Maps có thông tin đường đi từng chặng đến một hoặc một số địa chỉ hay toạ độ được chỉ định. Thông tin đường đi luôn được cung cấp từ vị trí hiện tại của người dùng.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
google.navigation:place=placename

Tham số

Để chạy tính năng chỉ đường, hãy sử dụng place hoặc q với waypoints (không bắt buộc). Để tùy chọn đánh dấu một điểm tham chiếu là trạm sạc, hãy xem Gửi kế hoạch chuyến đi bằng xe điện đến Google Maps.

  • q đặt điểm cuối cho các lượt tìm kiếm điều hướng. Đây có thể là vĩ độ/kinh độ hoặc địa chỉ được định dạng theo truy vấn. Nếu đó là một chuỗi truy vấn trả về nhiều kết quả, thì kết quả đầu tiên sẽ được chọn.

  • place đặt điểm cuối thành nhà riêng hoặc nơi làm việc. Hãy chỉ định nhà riêng để điều hướng đến nhà của người dùng và làm việc để di chuyển đến nơi làm việc của người dùng.

  • avoid thiết lập các tính năng mà tuyến đường cần tránh. avoid là không bắt buộc và có thể thiết lập thành một hoặc nhiều trong số:

    • t cho phí cầu đường
    • h cho đường cao tốc
    • f cho phà
  • waypoints chỉ định một hoặc nhiều vị trí trung gian để định tuyến đường đi đến đích đến cuối cùng do q chỉ định. Bạn có thể chỉ định nhiều điểm tham chiếu bằng cách sử dụng ký tự gạch đứng (|) để phân tách các vị trí – ví dụ: Berlin,Germany|Paris,France. Bạn có thể sử dụng nhiều điểm tham chiếu nếu cần. Các điểm tham chiếu sẽ được thêm vào tuyến đường theo thứ tự được liệt kê trong URL. Mỗi điểm tham chiếu có thể là một địa chỉ hoặc toạ độ vĩ độ/kinh độ được phân tách bằng dấu phẩy; và bạn có thể có các địa chỉ và toạ độ vĩ độ/kinh độ trong cùng một ý định. Chuỗi phải là ký tự thoát URL, vì vậy, bạn cần chuyển đổi các điểm tham chiếu như "Berlin,Đức|Paris,France" thành Berlin%2CGermany%7CParis%2CFrance.

Ví dụ

Ý định này sẽ yêu cầu chỉ đường từng chặng đến Vườn thú Taronga, ở Sydney, Úc:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Nếu không muốn trả phí cầu đường hoặc đi phà, bạn có thể yêu cầu định tuyến để tránh những tình huống sau:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Hoặc nếu bạn muốn đi theo chỉ dẫn về nhà, hãy sử dụng:

Uri mapIntentUri = Uri.parse("google.navigation:place=home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Để đi theo chỉ dẫn từng chặng đến 3 địa chỉ sau đây theo thứ tự, hãy đi qua Vườn thú Taronga làm điểm đến cuối cùng là q, còn Google Sydney và Nhà hát Opera Sydney làm điểm tham chiếu:

  1. Google Sydney

  2. Nhà hát Opera Sydney

  3. Vườn thú Taronga, Sydney, Úc

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7CSydney+Opera+House");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Tương tự như q, bạn có thể biểu thị bất kỳ điểm tham chiếu nào bằng vĩ độ và kinh độ được phân tách bằng dấu phẩy thay vì một địa chỉ. Ví dụ: để chạy cùng một chỉ đường trong khi chuyển kinh độ vĩ độ cho Nhà hát Opera Sydney thay vì địa chỉ:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7C-33.856159,151.215256");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Gửi kế hoạch cho chuyến đi bằng xe điện đến Google Maps

Hãy sử dụng ý định điều hướng nhiều điểm đến này để chỉ định một số điểm đến làm trạm sạc xe điện (EV). Ý định này nhằm mở rộng ý định đa điểm, giúp người lái xe duy trì đủ pin xe điện để đến điểm đến bằng cách đồng bộ hoá thông tin về trạm sạc giữa ứng dụng lên kế hoạch cho chuyến đi bằng xe điện và Google Maps.

Đối với trạm sạc, ý định chuyến đi:

  • Phải có tên và kinh độ vĩ độ
  • Có thể tuỳ ý chứa công suất đầu ra được dùng để tính thời gian sạc

Google sử dụng tên trạm sạc và kinh độ vĩ độ để tìm một trạm sạc phù hợp nhằm hiển thị dữ liệu đa dạng thức như loại giắc cắm, tổng số, tốc độ và khả năng sử dụng theo thời gian thực, phương thức thanh toán được hỗ trợ cũng như địa điểm yêu thích của máy chủ lưu trữ (POI). Ví dụ: thông tin chỉ đường lái xe trong bãi đỗ xe ngoài trời cho phần cuối của quy trình di chuyển, giờ mở cửa, điểm xếp hạng. Để đảm bảo rằng các trạm sạc khớp với dữ liệu trên Google, hãy sử dụng <brand name>, ví dụ: ChargePoint.

Tham số

Điểm đến cuối cùng

Để đặt một trạm sạc làm điểm đến cuối cùng, hãy sử dụng:

  • q: Phải chứa giá trị kinh độ vĩ độ của trạm sạc.
  • q_type: 1 chỉ định rằng điểm đến cuối cùng là một trạm sạc.
  • q_name: Tên của đích đến cuối cùng. Bắt buộc nếu q_type1.
  • q_power_output_kw: Một con số gấp đôi cho công suất đầu ra của trạm sạc, tính bằng kilogam. Không bắt buộc.

Điểm tham chiếu

Đối với điểm tham chiếu, tất cả tham số đều là các mảng giá trị song song, được phân tách bằng | theo cùng thứ tự như điểm tham chiếu, không bao gồm đích đến cuối cùng. Việc số lượng phần tử trong các mảng song song không khớp được coi là một ý định không đúng định dạng.

Để thêm một hoặc nhiều điểm tham chiếu trạm sạc, hãy sử dụng các tham số sau, tất cả đều không bắt buộc. Nếu một trong các đích đến được đánh dấu là trạm sạc, thì tên điểm tham chiếu sẽ trở thành tên bắt buộc đối với đích đến đó.

  • waypoints: Danh sách các điểm tham chiếu như mô tả trong ý định chỉ đường từng chặng. Phải là giá trị kinh độ vĩ độ cho các điểm tham chiếu của trạm sạc.

  • waypoint_types: Số loại cho mỗi điểm tham chiếu được chỉ định dưới dạng số. 0 là trạm sạc bất kỳ (giá trị mặc định) và 1 là trạm sạc.

  • waypoint_names: Tên điểm tham chiếu. Đây là trường bắt buộc đối với các trạm sạc.

  • waypoint_power_outputs_kw: Các con số gấp đôi cho nguồn điện của trạm sạc, tính bằng kilogam. Đối với các trạm sạc, bạn có thể tuỳ ý chỉ định giá trị đầu ra của điểm tham chiếu. Giá trị này sẽ được dùng làm dự phòng nếu không tìm thấy trạm sạc phù hợp. Ô trống có nghĩa là không có giá trị nào được cung cấp.

Hành vi trải nghiệm người dùng (UX)

Đối với các ý định về chuyến đi có nhiều điểm đến, màn hình tổng quan về tuyến đường sẽ hiển thị nhưng quá trình điều hướng không tự động bắt đầu.

Để ý định được định dạng chính xác, Google Maps sẽ hiển thị màn hình tổng quan về tuyến đường cho chuyến đi. Màn hình tổng quan về tuyến đường sẽ hiển thị tất cả các điểm tham chiếu và đích đến cuối cùng của ý định, cùng với các đề xuất sạc nếu có.

Đối với bất kỳ điểm tham chiếu hoặc điểm đến cuối cùng nào được đánh dấu là trạm sạc, Google Maps sẽ tìm kiếm một địa điểm trùng khớp trong cơ sở dữ liệu của Google.

Khi tìm thấy thông tin trùng khớp, Google Maps sẽ sử dụng dữ liệu của Google để hiển thị trạm sạc trong giao diện người dùng (UI) và đưa ra đề xuất sạc cho trạm sạc đó. Nếu không tìm thấy kết quả trùng khớp, dữ liệu được cung cấp trong ý định cho trạm sạc (kinh độ, tên và công suất đầu ra) sẽ được dùng để hiển thị trạm sạc này trong giao diện người dùng và đưa ra đề xuất về trạm sạc tại trạm sạc này.

Ví dụ

Di chuyển tới điểm đến cuối cùng qua nhiều trạm sạc

Ý định sau đây điều hướng đến đích đến cuối cùng là Port Macquarie NSW thông qua hai trạm sạc là ChargePoint và Evie.

Điểm đến theo thứ tự:

  1. Trạm sạc ChargePoint (vị trí: -32.9599188,151.6240806, công suất: 6,6kw)

  2. Trạm sạc Evie (vị trí: -31.9432539,152.4699808, công suất đầu ra: 350kw)

  3. Port Macquarie NSW

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806%7C-31.9432539%2C152.4699808"
            + "&waypoint_types=1%7C1"
            + "&waypoint_names=ChargePoint+Charging+Station%7CEvie+Charging+Station"
            + "&waypoint_power_outputs_kw=6.6%7C350");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Công suất đầu ra không xác định

Nếu không xác định được giá trị công suất đầu ra, hãy để trống khe tương ứng của waypoint_power_outputs_kw. Hoặc nếu tất cả các ô đều trống, bạn không cần chỉ định tham số waypoint_power_outputs_kw.

Điểm đến theo thứ tự:

  1. Trạm sạc ChargePoint (vị trí: -32.9599188,151.6240806, công suất đầu ra: không xác định)

  2. Port Macquarie NSW

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806"
            + "&waypoint_types=1"
            + "&waypoint_names=ChargePoint+Charging+Station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Đánh dấu điểm đến cuối cùng là trạm sạc

Để đánh dấu điểm đến cuối cùng là trạm sạc, hãy chỉ định các tham số q_type, q_nameq_power_output_kw.

Điểm đến theo thứ tự:

  1. Vườn thú Taronga, Sydney, Úc

  2. Trạm sạc ChargePoint (vị trí: -32.9599188,151.6240806, công suất đầu ra: không xác định)

  3. Trạm sạc Evie (vị trí: -31.9432539,152.4699808, công suất đầu ra: 350kw)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=-31.9432539,152.4699808&q_type=1&q_name=Evie+Charging+Station&q_power_output_kw=350"
            + "&waypoints=Taronga+Zoo%2C+Sydney+Australia%7C-32.9599188%2C151.6240806"
            + "&waypoint_types=0%7C1"
            + "&waypoint_names=%7CChargePoint+Charging+Station"
            + "&waypoint_power_outputs_kw=%7C");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);