android 自动 加 小组件,android-通过代码重新添加时,小部件不响应

博主在开发Android启动器时,实现了用户从列表添加小部件并将信息存于数据库,重启应用或设备时通过代码添加小部件。但添加后小部件虽成功加入布局,却未启用/更新,不响应点击也不显示数据,博主为此困扰许久。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在开发启动器.它使用户可以从列表中添加小部件,效果很好.

当用户在屏幕上添加小部件时,我将有关小部件的信息(PackageName,ClassName及其在屏幕上的坐标)存储在数据库中.

重新启动应用程序(或设备本身)时,我通过代码将这些(用户选择的)小部件添加回去:

// APPWIDGET_HOST_ID is any number you like

appWidgetManager = AppWidgetManager.getInstance(this);

appWidgetHost = new AppWidgetHost(this, APPWIDGET_HOST_ID);

AppWidgetProviderInfo newAppWidgetProviderInfo = new AppWidgetProviderInfo();

// Get an id

int appWidgetId = appWidgetHost.allocateAppWidgetId();

// Get the list of installed widgets

List appWidgetInfos = new ArrayList();

appWidgetInfos = appWidgetManager.getInstalledProviders();

for(int j = 0; j < appWidgetInfos.size(); j++)

{

if (appWidgetInfos.get(j).provider.getPackageName().equals(PackageName) && appWidgetInfos.get(j).provider.getClassName().equals(ClassName))

{

// Get the full info of the required widget

newAppWidgetProviderInfo = appWidgetInfos.get(j);

break;

}

}

// Create Widget

AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);

hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);

// Add it to your layout

RelativeLayout widgetLayout = (RelativeLayout) findViewById(R.id.widgetLayout);

widgetLayout.addView(hostView);

该小部件已成功添加到布局,但似乎未启用/更新.尽管我输入了以下内容,但它不响应点击(例如,模拟时钟),也不显示任何数据(例如,音乐播放器小部件):

@Override

protected void onStart() {

super.onStart();

appWidgetHost.startListening();

}

@Override

protected void onStop() {

super.onStop();

appWidgetHost.stopListening();

}

我已经坚持了很长时间.搜索了很多,但似乎我是这个问题上世界上唯一的一个.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值