Có nên dùng các phần mềm widget trên dt

  • Platform
  • Android Studio
  • Google Play
  • Jetpack
  • Kotlin
  • Docs
    • Overview
    • Guides
    • UI Guide
    • Reference
    • Samples
    • Design & Quality
  • Games

Stay organized with collections Save and categorize content based on your preferences.

Có nên dùng các phần mềm widget trên dt
Hình 1. Triển khai một tiện ích cho GET_EXERCISE_OBSERVATION.

Đối với nhiều ý định, phản hồi tốt nhất là cung cấp câu trả lời đơn giản, xác nhận ngắn gọn hoặc trải nghiệm tương tác nhanh cho người dùng. Bạn có thể hiển thị tiện ích ứng dụng Android trong Trợ lý Google để thực hiện các loại ý định này.

Hướng dẫn này trình bày cách thực hiện các truy vấn của người dùng qua Trợ lý bằng cách sử dụng tiện ích và cách cải thiện trải nghiệm tiện ích của bạn cho Trợ lý khi sử dụng Thư viện mở rộng tiện ích.

Lợi ích

Tiện ích là các chế độ xem ứng dụng thu nhỏ có thể nhúng được trên các nền tảng Android, chẳng hạn như trình chạy hoặc màn hình khóa. Thông qua Hành động trong ứng dụng, bạn có thể tăng tác động của các tiện ích bằng cách tạo điều kiện đủ để nó có thể hiển thị trong Trợ lý:

  1. Khám phá: Chủ động hiển thị các tiện ích theo truy vấn bằng ngôn ngữ tự nhiên của người dùng.
  2. Lượt tương tác: Hiển thị các tiện ích trong ngữ cảnh không cần dùng tay, chẳng hạn như khi Trợ lý cung cấpkết quả cá nhân trên màn hình khóa và trênAndroid Auto.
  3. Lưu giữ: Cho phép người dùng ghim các tiện ích hiển thị trong Trợ lý vào trình chạy của họ. Chức năng ghim đòi hỏi phải có Thư viện tiện ích mở rộng.

Có hai cách để người dùng có thể gọi các tiện ích trên Trợ lý:

  • Yêu cầu rõ ràng tiện ích theo tên hoặc
  • Việc truy vấn bằng một khẩu lệnh tới Trợ lý sẽ kích hoạt ý định tích hợp (BII) hoặc đối tượng có ý định tùy chỉnh được định cấu hình để thực hiện tiện ích.

Lời gọi rõ ràng

Để gọi các tiện ích một cách rõ ràng cho bất kỳ ứng dụng đã cài đặt nào, người dùng có thể hỏi Trợ lý những câu đại loại như:

  • "Này Google, hãy hiển thị tiện ích ExampleApp."
  • "Tiện ích từ ExampleApp."

Trợ lý sẽ hiển thị các tiện ích này dưới dạng một phần giới thiệu mang tính khái quát: "ExampleApp nói đây là một tiện ích". Mặc dù Trợ lý trả về nguyên bản các tiện ích được yêu cầu theo cách mà nhà phát triển ứng dụng không cần phải làm gì, nhưng phương thức gọi này yêu cầu người dùng phải biết rõ về tiện ích để yêu cầu. Để đơn giản hóa quá trình khám phá tiện ích, hãy sử dụng phương thức thực hiện ý định được nêu chi tiết trong phần sau.

Thực hiện ý định

Giúp các tiện ích của bạn dễ tìm hơn bằng cách sử dụng chúng để thực hiện nhiệm vụ qua ngôn ngữ tự nhiên mà người dùng truy vấn trên Trợ lý. Ví dụ: bạn có thể trả lại một tiện ích bất cứ khi nào người dùng kích hoạt GET_EXERCISE_OBSERVATION BII trong ứng dụng thể dục bằng cách hỏi "Này Google, tuần này tôi đã chạy được bao nhiêu dặm trên ExampleApp? Ngoài việc đơn giản hóa việc khám phá, việc tích hợp tiện ích với Hành động trong ứng dụng cũng mang lại các lợi thế sau:

  • Quyền truy cập tham số: Trợ lý cung cấp các tham số ý định được trích xuất từ cụm từ tìm kiếm của người dùng đến tiện ích của bạn để cho phép bật các phản hồi phù hợp.
  • Giới thiệu tính năng TTS tùy chỉnh: Bạn có thể cung cấp một chuỗi văn bản dưới dạng lời nói (TTS) để thông báo khi hiển thị tiện ích của bạn.
  • Ghim tiện ích: Trợ lý sẽ hiển thị nút Thêm tiện ích này gần khu vực tiện ích của bạn, cho phép người dùng dễ dàng ghim tiện ích vào trình chạy của họ.

Triển khai tiện ích

Để triển khai tiện ích nhằm thực hiện ý định của bạn, hãy làm theo các bước sau:

  1. Triển khai tiện ích Android bằng cách làm theo các bước được mô tả trong phần Tạo tiện ích đơn giản.
  2. Trong tệp tài nguyên shortcuts.xml của ứng dụng, hãy thêm một phần tử vào khả năng hỗ trợ của bạn có chứa thông tin chi tiết về việc thực hiện đơn hàng cũng như thẻ BII . Cập nhật tiện ích của bạn để xử lý các tham số.
  3. (Bắt buộc) Thêm thư viện Tiện ích tiện ích, cho phép Trợ lý truyền tên và tham số BII vào tiện ích của bạn. Đồng thời, bạn cũng có thể dùng tính năng giới thiệu tùy chỉnh của tính năng Chuyển văn bản sang lời nói và chức năng ghim vào tiện ích.

Phần sau đây mô tả giản đồ cho shortcuts.xml.

Giản đồ tiện ích

Phần tử được định nghĩa là phần tử thực hiện nhiệm vụ trong các phần tử trong shortcuts.xml. Những phần tử này bắt buộc phải có các thuộc tính sau, trừ khi được ghi chú là không bắt buộc:

Thẻ Shortcuts.xmlCó trong:Thuộc tính
  • android:identifier
  • android:targetClass
  • Vui lòng xem Giản đồ hành động trong ứng dụng để biết các thuộc tính.
  • android:name (chỉ áp dụng cho TTS)
  • android:value (không bắt buộc)

Mô tả giản đồ tiện ích

Phần tử thực hiện tiện ích cấp cao nhất.

Thuộc tính:

  • android:identifier: Giá trị nhận dạng duy nhất cho phương thức thực hiện đơn hàng này. Giá trị này phải khác nhau trên các phần tử thực hiện được xác định trong .
  • android:targetClass: Tên đầy đủ của lớp AppWidgetProvider để xử lý ý định.

Ánh xạ một tham số BII với giá trị ý định . Bạn có thể xác định 0 hoặc nhiều tham số khác cho từng phần tử . Trong quá trình thực hiện nhiệm vụ, Trợ lý sẽ truyền tham số bằng cách cập nhật các tiện nghi và dịch vụ đi kèm cho thực thể tiện ích dưới dạng các cặp giá trị/khóa theo định dạng sau:

  • Khóa: android:key được xác định cho tham số.
  • Giá trị: Giá trị mà BII trích xuất từ kết quả đầu vào bằng giọng nói của người dùng.

Bạn có thể truy cập vào tiện nghi và dịch vụ đi kèm này bằng cách gọi getAppWidgetOptions() trên đối tượng AppWidgetManager được liên kết và trả về Bundle chứa tên của BII đã kích hoạt cũng như các tham số của nó. Vui lòng xem bài viết Trích xuất giá trị tham số để biết thêm thông tin chi tiết.

Để biết thêm thông tin về việc so khớp tham số BII, vui lòng xem bài viết Dữ liệu và so khớp tham số.

Thẻ tùy chọn khai báo bạn nên sử dụng phần giới thiệu TTS tùy chỉnh cho tiện ích này. Thẻ này yêu cầu các giá trị thuộc tính sau:

  • android:name: "hasTts"
  • android:value: "đúng"

Mã mẫu

Tệp XML sau đây minh họa cấu hình thực hiện tiện ích cho một khả năng hỗ trợ BII GET_EXERCISE_OBSERVATION:

shortcuts.xml


  
    
    
    
  

Bạn có thể chỉ định nhiều phần tử hoặc sử dụng kết hợp nhiều phần tử cho từng khả năng hỗ trợ. Phương pháp này cho phép bạn cung cấp trải nghiệm tùy chỉnh dựa trên các tổ hợp tham số khác nhau do người dùng cung cấp. Ví dụ: nếu người dùng không chỉ định vị trí trả xe trong truy vấn của họ, thì bạn có thể hướng họ đến hoạt động trong ứng dụng nơi thể hiện các tùy chọn để đặt vị trí nhận xe và trả xe. Vui lòng xem phần Ý định dự phòng để biết thêm thông tin chi tiết về cách xác định ý định dự phòng.

Trong lớp AppWidgetProvider mẫu sau đây, hàm riêng updateAppWidget() được dùng để trích xuất tên và tham số BII từ các tùy chọn tiện ích Bundle:

Kotlin

package com.example.exampleapp

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

/**
 * Implementation of App Widget functionality.
 */
class MyAppWidget : AppWidgetProvider() {
    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        // There may be multiple widgets active, so update all of them
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }

    private fun updateAppWidget(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
        val widgetText: CharSequence = context.getString(R.string.appwidget_text)

        // Construct the RemoteViews object
        val views = RemoteViews(context.packageName, R.layout.my_app_widget)
        views.setTextViewText(R.id.appwidget_text, widgetText)

        // Extract the name and parameters of the BII from the widget options.
        val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId)
        val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII) // "actions.intent.CREATE_TAXI_RESERVATION"
        val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS)
        if (params != null && params.containsKey("dropoff")) {
            val dropoffLocation = params.getString("dropoff")
            // Build your RemoteViews with the extracted BII parameter
            // ...
        }
        appWidgetManager.updateAppWidget(appWidgetId, views)
    }
}

Java

package com.example.exampleapp;

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;

/**
 * Implementation of App Widget functionality.
 */
public class MyAppWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }

    private static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {

        CharSequence widgetText = context.getString(R.string.appwidget_text);

        // Construct the RemoteViews object
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget);
        views.setTextViewText(R.id.appwidget_text, widgetText);

        // Extract the name and parameters of the BII from the widget options.
        Bundle optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId);
        String bii =
                optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII); // "actions.intent.CREATE_TAXI_RESERVATION"
        Bundle params =
                optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS);

        if (params != null && params.containsKey(("dropoff"))){
            String dropoffLocation = params.getString("dropoff");
            // Build your RemoteViews with the extracted BII parameter
            // ...
        }

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

Thư viện tiện ích mở rộng

Thư viện mở rộng tiện ích của Hành động trong ứng dụng giúp cải thiện tiện ích của bạn đối với trải nghiệm Trợ lý chuyển tiếp bằng lời nói. Thư viện này cho phép các tiện ích của bạn nhận được thông tin thực hiện quan trọng từ BII đã kích hoạt, bao gồm cả tên BII và mọi tham số ý định được trích xuất từ truy vấn của người dùng. Thư viện Maven này cho phép bạn cung cấp phần giới thiệu văn bản dưới dạng lời nói (TTS) được tùy chỉnh cho từng tiện ích, cho phép Trợ lý thông báo với người dùng tóm tắt nội dung hiển thị trực quan. Dịch vụ này cũng kích hoạt tính năng ghim trình chạy, giúp người dùng dễ dàng lưu các tiện ích hiển thị trong Trợ lý vào màn hình trình chạy của họ.

Bắt đầu bằng cách thêm thư viện vào phần phụ thuộc của tệp build.gradle cho mô-đun ứng dụng của bạn:

app/build.gradle

dependencies {
    //...
    implementation "com.google.assistant.appactions:widgets:0.0.1"
}

Giới thiệu tùy chỉnh

Sau khi nhập Thư viện mở rộng tiện ích, bạn có thể cung cấp phần giới thiệu TTS tùy chỉnh cho các tiện ích của mình. Để thêm định nghĩa vào AppWidgetProvider của tiện ích, hãy mở lớp trong IDE và nhập Thư viện mở rộng tiện ích:

Kotlin

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

Java

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;

Tiếp theo, hãy sử dụng thư viện để xác định các chuỗi giới thiệu và cập nhật tiện ích:

ExampleAppWidget

Kotlin

package com.example.exampleapp

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

/**
 * Implementation of App Widget functionality.
 */
object MyAppWidget : AppWidgetProvider() {
    fun updateAppWidget(
        context: Context?,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
        val appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager)
            .setResponseSpeech("Hello world") // TTS to be played back to the user.
            .setResponseText("Hello world!") // Response text to be displayed in Assistant.
            .build()

        // Update widget with TTS.
        appActionsWidgetExtension.updateWidget(appWidgetId)

        // Update widget UI.
        appWidgetManager.updateAppWidget(appWidgetId, views)
    }
}

Java

package com.example.exampleapp;

//... Other module imports
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;

/**
 * Implementation of App Widget functionality.
 */
public class MyAppWidget extends AppWidgetProvider {

  static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
    int appWidgetId) {

    AppActionsWidgetExtension appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager)
      .setResponseSpeech("Hello world")  // TTS to be played back to the user.
      .setResponseText("Hello world!")  // Response text to be displayed in Assistant.
      .build();

      // Update widget with TTS.
      appActionsWidgetExtension.updateWidget(appWidgetId);

      // Update widget UI.
      appWidgetManager.updateAppWidget(appWidgetId, views);
    }

}

Ghim trình chạy

Thư viện này cho phép hiển thị nút Thêm tiện ích này cùng với tiện ích của bạn trong Trợ lý. Tính năng ghim yêu cầu thêm việc xác định người nhận sau vào AndroidManifest.xml:

AndroidManifest.xml


  
    
      
    
  
  
    
      
    
  

Tình trạng sẵn có của khoảng không quảng cáo

BBI hỗ trợ khoảng không quảng cáo nội tuyến hoặc khoảng không quảng cáo trên web có thể mở rộng những khoảng không quảng cáo này tới các lần thực hiện tiện ích của bạn.

Khoảng không quảng cáo nội tuyến

Mẫu mã sau đây minh họa chức năng BII START_EXERCISE được định cấu hình cho khoảng không quảng cáo nội tuyến và thực hiện tiện ích:

shortcuts.xml


  
    
    
  



  
  

Trong mẫu trước đó, khi người dùng kích hoạt khả năng này bằng cách yêu cầu Trợ lý, "Bắt đầu chạy với ExampleApp", gói tùy chọn cho việc thực hiện sẽ chứa cặp khóa-giá trị sau:

  • Khóa = “exerciseName”
  • Giá trị = “RunningShortcut”

Khoảng không quảng cáo trên web

Xem mã mẫu sau đây để biết khả năng bật khoảng không quảng cáo web và thực hiện tiện ích:

shortcuts.xml


  
    
      
        
      
    
  

Thử nghiệm

Sử dụng Công cụ kiểm tra Hành động trong ứng dụng, một tính năng của trình bổ trợ Trợ lý Google cho Android Studio để thử nghiệm các tiện ích trên một thiết bị thực hoặc ảo. Để sử dụng công cụ này, vui lòng làm theo các bước sau:

  1. Kết nối thiết bị thử nghiệm với ứng dụng đang chạy.
  2. Trong Android Studio, vui lòng chọn Công cụ > Hành động trong ứng dụng > Công cụ kiểm tra hành động trong ứng dụng.
  3. Nhấp vào Tạo bản xem trước.
  4. Trong Android Studio, hãy chạy ứng dụng của bạn trên thiết bị thử nghiệm.
  5. Dùng ứng dụng Trợ lý trên thiết bị thử nghiệm để kiểm tra Hành động trong ứng dụng. Ví dụ bạn có thể nói những câu đại loại như "Này Google, tuần này tôi đã chạy được bao nhiêu dặm trên ExampleApp?".
  6. Quan sát hành vi của ứng dụng hoặc sử dụng Trình gỡ lỗi Android Studio để xác minh kết quả của hành động mong muốn.

Nguyên tắc về chất lượng

Phần này nêu bật các yêu cầu chính và những phương pháp tốt nhất khi bạn tích hợp Hành động trong ứng dụng với các tiện ích.

Nội dung trong tiện ích

  • (Bắt buộc) Không hiển thị quảng cáo trong tiện ích của bạn.
  • Nội dung tiện ích phải hoàn toàn tập trung vào việc thực hiện ý định — đừng cố gắng thực hiện nhiều ý định thông qua một tiện ích hoặc thêm nội dung không liên quan.

Xử lý việc xác thực

  • (Bắt buộc) Khi cần xác thực người dùng để hoàn thành luồng người dùng, vui lòng trả về một tiện ích giải thích rằng người dùng cần tiếp tục trong ứng dụng. Xác thực người dùng nội tuyến trong Trợ lý Google không được hỗ trợ cho Hành động trong ứng dụng.
  • Nếu người dùng đang cho phép ứng dụng hiển thị dữ liệu qua tiện ích, bạn có thể trả lại một tiện ích lỗi tại thời gian chạy đối với người dùng trái phép.

Ý định dự phòng

  • (Bắt buộc) Trong shortcuts.xml, hãy luôn cung cấp tính năng dự phòng ngoài việc thực hiện tiện ích cho một khả năng nhất định. Ý định dự phòng là phần tử không có giá trị bắt buộc. Điều này cho phép Trợ lý thực hiện một Hành động trong trường hợp truy vấn của người dùng không chứa các tham số bắt buộc theo các phần tử thực hiện khác được xác định trong chức năng. Trường hợp ngoại lệ của điều này là khi không có tham số bắt buộc nào cho chức năng đó, bạn chỉ cần cung cấp phương thức thực hiện tiện ích.
  • Ý định dự phòng giúp mở ứng dụng của bạn hiển thị trong màn hình liên quan thay vì màn hình chính.

Mã mẫu sau đây minh họa với dự phòng hỗ trợ việc thực hiện chính:

shortcuts.xml


  
    
    
      
      
    
    
    
    
  

Tiết lộ dữ liệu trên Google Play

Phần này liệt kê các dữ liệu của người dùng cuối được thu thập qua phiên bản mới nhất của Thư viện mở rộng tiện ích.

SDK này sẽ gửi phản hồi văn bản dưới dạng lời nói (TTS) do nhà phát triển cung cấp, Trợ lý Google sẽ thông báo cho người dùng bằng công nghệ lời nói của Trợ lý. Google không lưu trữ thông tin này.

Hành động trong ứng dụng cũng có thể thu thập siêu dữ liệu của ứng dụng khách cho các mục đích sau:

  • Để theo dõi tỷ lệ sử dụng của các phiên bản SDK khác nhau.
  • Để định lượng việc sử dụng các tính năng SDK trên ứng dụng.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2022-08-12 UTC.

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "translationIssue", "label":"Translation issue" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]