You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio用Java开发的自制启动器上显示其他应用Widget?

Android自定义启动器显示第三方Widget实现方案

1. 声明必要权限

首先在AndroidManifest.xml中添加核心权限:

  • BIND_APPWIDGET:绑定Widget服务的必备系统权限
  • QUERY_ALL_PACKAGES:Android 11及以上版本获取已安装应用Widget列表需要该权限,注意提前做动态权限申请
  • RECEIVE_BOOT_COMPLETED(可选):用于开机后自动恢复启动器之前已经添加的Widget

注:Android 12及以上系统绑定Widget前需要用户手动确认授权,绑定逻辑前要先校验权限是否已获取。

2. 实现Widget宿主核心逻辑

Android系统原生提供AppWidgetHost类供自定义启动器类应用托管第三方Widget,核心实现步骤如下:

  • 初始化AppWidgetHost实例,传入自定义的唯一宿主ID即可:
// 示例代码,宿主ID可自行定义整型常量
private static final int APPWIDGET_HOST_ID = 1001;
private AppWidgetHost mAppWidgetHost = new AppWidgetHost(context, APPWIDGET_HOST_ID);
  • 调用AppWidgetManager的getInstalledProviders()方法,获取系统内所有已安装应用提供的Widget列表,可按需过滤出时钟、天气类目标Widget。
  • 用户选中要添加的Widget后,先分配唯一的Widget ID,再发起绑定申请:
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
Intent bindIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, 选中的Widget对应的provider信息);
startActivityForResult(bindIntent, 自定义的绑定请求码);
  • 绑定成功的回调中,生成Widget视图并添加到启动器的预留布局容器中:
AppWidgetHostView hostView = mAppWidgetHost.createView(context, appWidgetId, 选中的Widget信息);
// 直接将生成的Widget视图添加到你启动器页面的布局容器内即可
widgetContainer.addView(hostView);

3. 生命周期适配

  • 启动器页面处于可见状态时,调用mAppWidgetHost.startListening()监听Widget的实时更新
  • 启动器页面退到后台时,调用mAppWidgetHost.stopListening()停止监听,减少不必要的资源消耗
  • 如果需要支持用户调整Widget尺寸,调用AppWidgetHostView的updateAppWidgetSize()方法适配不同尺寸需求即可

内容的提问来源于stack exchange,提问作者raphael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:57:03