Ý đị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ỳ thoả thuận mức độ cung cấp dịch vụ (SLA) hoặc chính sách ngừng sử dụng nào. Cách triển khai này có thể thay đổi trong các bản phát hành sau này.

Đối với phần mềm mẫu, tệp dữ liệu và/hoặc mã nguồn đi kèm với 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ất kỳ loại bảo hành nào. Google từ chối rõ ràng mọi loại bảo hành, dù là công khai, ngầm ẩn, theo luật định hay loại khác, bao gồm nhưng không giới hạn ở bảo hành về khả năng bán được, tính phù hợp cho một mục đích cụ thể và 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 Android Automotive, bạn có thể khởi 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 phần Android cho ô tô.

Tổng quan

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

Yêu cầu về ý định

Để chạy Google Maps cho Android Automotive bằng một ý định, trước tiên, bạn phải tạo một đố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 của Google Maps đều được gọi là hành động Xem, ACTION_VIEW.

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

  • 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ý Ý định. Nếu bạn không đặt gói, hệ thống sẽ xác định ứng dụng nào có thể xử lý Ý định. Nếu có nhiều ứng dụng, bạn có thể được hỏi ứng dụng nào bạn muốn sử dụng.

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 pháp phổ biến là truyề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 Ý định, 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 những ý định này cho người dùng.

Để xác minh rằng có ứng dụng nào có thể nhận ý định hay không, hãy gọi [resolveActivity()] trên đối tượng [Intent]. Nếu kết quả không rỗng, thì ít nhất một ứng dụng có thể xử lý ý định và bạn 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ụ: để khởi chạy tính năng chỉ đường từng chặng đến Sở 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ả chuỗi được truyề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á chuỗi. Ví dụ:

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

Chạy tính năng chỉ đường từng chặng

Sử dụng ý định này để khởi chạy tính năng chỉ đường của Google Maps với chỉ dẫn từng chặng đến một hoặc nhiều địa chỉ hoặc toạ độ được chỉ định. Thông tin chỉ đường 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ố

Để khởi chạy tính năng điều hướng, hãy sử dụng place hoặc q với waypoints (không bắt buộc). Để đánh dấu một điểm trung gian là trạm sạc (không bắt buộc), hãy xem bài viết 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 đường đi. Đây có thể là vĩ độ/kinh độ hoặc địa chỉ được định dạng 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à hoặc cơ quan. Chỉ định nhà để điều hướng đến nhà của người dùng và chỉ định cơ quan để điều hướng đến nơi làm việc của người dùng.

  • avoid đặt các tính năng mà tuyến đường nên tránh. avoid là tuỳ chọn và có thể được đặt 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 địa điểm 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 trung gian bằng cách sử dụng ký tự gạch đứng (|) để phân tách các địa điểm – ví dụ: Berlin,Germany|Paris,France. Bạn có thể sử dụng bao nhiêu điểm trung gian tuỳ ý. Các điểm trung gian sẽ được thêm vào tuyến theo thứ tự được liệt kê trong URL. Mỗi điểm trung gian 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ó địa chỉ và toạ độ vĩ/dài trong cùng một ý định. Chuỗi phải được bỏ ký tự thoát URL, vì vậy, các điểm trung gian như "Berlin,Germany|Paris,France" phải được chuyển đổi 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 tuyến đường cố gắng tránh những trường hợp 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 chuyển đến trang chủ, 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);

Để khởi chạy tính năng chỉ đường từng chặng đến 3 địa chỉ sau theo thứ tự, hãy đặt Vườn thú Taronga làm đích đến cuối cùng q, còn Google Sydney và Nhà hát Opera Sydney làm điểm trung gian:

  1. Google Sydney

  2. Nhà hát Opera Sydney

  3. Sở 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 trung gian nào bằng vĩ độ và kinh độ được phân tách bằng dấu phẩy thay vì địa chỉ. Ví dụ: để khởi chạy cùng một tính năng chỉ đường trong khi truyền vĩ độ kinh độ 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

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

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

  • Phải chứa tên và vĩ độ-kinh độ
  • Có thể chứa công suất đầu ra (không bắt buộc) để dùng cho việc tính thời gian sạc

Google sử dụng tên trạm sạc và vĩ độ-kinh độ để tìm một địa điểm trạm sạc phù hợp nhằm hiển thị dữ liệu đa dạng thức như loại đầu nối, tổng số, tốc độ và tình trạng còn chỗ theo thời gian thực, phương thức thanh toán được hỗ trợ và các điểm yêu thích (POI) của máy chủ. Ví dụ: chỉ đường lái xe trong các bãi đỗ xe ngoài trời cho phần cuối cùng của lộ trình, 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 của Google, hãy sử dụng <brand name>, ví dụ: ChargePoint.

Tham số

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

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

  • q: Phải chứa giá trị lat-long của trạm sạc.
  • q_type: 1 chỉ định rằng đích đế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: Số kép cho công suất đầu ra của trạm sạc tính bằng kilowatt. Không bắt buộc.

Điểm tham chiếu

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

Để thêm một hoặc nhiều trạm sạc điểm trung gian, hãy sử dụng các tham số sau đây, 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 trung gian sẽ trở thành thông tin bắt buộc cho đích đến đó.

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

  • waypoint_types: Loại cho mỗi điểm trung gian được chỉ định dưới dạng số. 0 là bất kỳ điểm dừng nào (giá trị mặc định) và 1 là trạm sạc.

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

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

Hành vi liên quan đến trải nghiệm người dùng (UX)

Đối với ý định 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 tính năng chỉ đường sẽ không tự động bắt đầu.

Đối với ý đị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 trung gian và đích đến cuối cùng từ ý định, cùng với các đề xuất sạc nếu có.

Đối với mọi điểm trung gian hoặc điểm đến cuối cùng được đánh dấu là trạm sạc, Google Maps sẽ tìm kiếm một địa điểm phù hợp trong cơ sở dữ liệu của Google.

Khi tìm thấy kết quả 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 một sạc trạm (vĩ độ-kinh độ, tên và công suất đầu ra) sẽ được dùng để hiển thị sạc trạm này trong giao diện người dùng và đưa ra đề xuất sạc tại sạc trạm này.

Ví dụ

Chỉ đường đến điểm đến cuối cùng thông qua nhiều trạm sạc

Ý định sau đây sẽ chỉ đường đến đích cuối cùng là Port Macquarie NSW, qua hai trạm sạc là ChargePoint và Evie.

Các đích đến theo thứ tự:

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

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

  3. Port Macquarie, New South Wales

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ị đầu ra công suất, hãy để trống khe tương ứng của waypoint_power_outputs_kw. Hoặc nếu tất cả các khe đều trống, bạn không cần chỉ định tham số waypoint_power_outputs_kw.

Các đích đế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, New South Wales

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 đích đến cuối cùng là trạm sạc

Để đánh dấu đích đế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.

Các đích đến theo thứ tự:

  1. Sở 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);