微件可检测性

在搭载 Android 8.0(API 级别 26)及更高版本的设备上,允许用户创建固定快捷方式的启动器还可让用户将 widget 固定到主屏幕上。与固定快捷方式类似,这些固定的 widget 让用户能够访问应用中的特定任务,并且可以直接从应用添加到主屏幕,如以下视频所示。

自适应布局示例
图 2. 固定 widget 的示例。

允许用户固定 widget

在您的应用中,您可以按照以下步骤创建请求,让系统将某个 widget 固定到受支持的启动器:

  1. 请务必在应用的清单文件中声明微件

  2. 调用 requestPinAppWidget() 方法,如以下代码段所示:

Kotlin

val appWidgetManager = AppWidgetManager.getInstance(context)
val myProvider = ComponentName(context, ExampleAppWidgetProvider::class.java)

if (appWidgetManager.isRequestPinAppWidgetSupported()) {
    // Create the PendingIntent object only if your app needs to be notified
    // when the user chooses to pin the widget. Note that if the pinning
    // operation fails, your app isn't notified. This callback receives the ID
    // of the newly pinned widget (EXTRA_APPWIDGET_ID).
    val successCallback = PendingIntent.getBroadcast(
            /* context = */ context,
            /* requestCode = */ 0,
            /* intent = */ Intent(...),
            /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT)

    appWidgetManager.requestPinAppWidget(myProvider, null, successCallback)
}

Java

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName myProvider = new ComponentName(context, ExampleAppWidgetProvider.class);

if (appWidgetManager.isRequestPinAppWidgetSupported()) {
    // Create the PendingIntent object only if your app needs to be notified
    // when the user chooses to pin the widget. Note that if the pinning
    // operation fails, your app isn't notified. This callback receives the ID
    // of the newly pinned widget (EXTRA_APPWIDGET_ID).
    PendingIntent successCallback = PendingIntent.getBroadcast(
            /* context = */ context,
            /* requestCode = */ 0,
            /* intent = */ new Intent(...),
            /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT);

    appWidgetManager.requestPinAppWidget(myProvider, null, successCallback);
}

当 widget 的功能最为相关时,用户可以通过 widget 选择器或在应用中发现并添加 widget。如需了解详情,请参阅发现和宣传