如何在代码中将小部件添加到主屏幕

4

我正在尝试编写一个简单的启动器应用程序。在这个应用程序中,我想添加一个默认的小部件,如Android时钟。我加载了所有默认小部件的信息,如x、y位置、宽度和高度以及包信息。加载完后,我会获取用于主屏幕的appwidgetId。代码如下:

public void bindAppWidgets(Launcher.DesktopBinder binder,
                LinkedList<WidgetInfo> appWidgets) {
            if (!appWidgets.isEmpty()) {
                for(int k=0;k<appWidgets.size();k++){
                    final WidgetInfo item = appWidgets.get(k);
                    System.out.println("Item to be added in the view :::::::::"+item.toString());
                    int appWidgetId = item.appWidgetId;
                    if(item.itemType == LauncherProvider.Widgets.ITEM_TYPE_DEFAULT_APPWIDGET){
                        bindDefaultAppwidgets(item);
                        continue;
                        item.appWidgetId=mAppWidgetHost.allocateAppWidgetId();
                        LauncherModel.updateItemInDatabase(getApplicationContext(), item);
                        appWidgetId=item.appWidgetId;
                    }

                    final AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
                    System.out.println("the Appwidget info is*******"+appWidgetInfo);
                    item.hostView =(LauncherAppWidgetHostView) mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo);

                    if (LOGD) {
                        d(TAG, String.format("about to setAppWidget for id=%d, info=%s", appWidgetId,
                                appWidgetInfo));
                    }

                    item.hostView.setAppWidget(appWidgetId, appWidgetInfo);
                    item.hostView.setTag(item);
                    MyAbsoluteLayout.LayoutParams lp=new MyAbsoluteLayout.LayoutParams(item.spanX, item.spanY, item.cellX, item.cellY);
                    System.out.println("after load the hostview ::::::::::: :::::::::"+item.toString());
                    mDragLayer.addView(item.hostView,lp);
                }
                mDragLayer.requestLayout();
            }

        }

现在我在AppWidgetProviderInfo中获取的小部件值为null,因此我无法在主屏幕上加载hostview。有没有人建议我如何在没有appwidgetpicker应用程序的情况下将小部件添加到主屏幕。

1个回答

1

除非启动器具有特殊权限并且是系统应用程序(这将使其能够使用此权限),否则无法使用此功能。

有很多地方会告诉你同样的事情,只需搜索“bindAppWidgetId”即可。以下是一个例子: 将AppWidgets绑定到AppWidgetHost - Android 原因是安全性。

我认为即使对于您自己的应用程序小部件,您也不能绑定。但是,您始终可以通过创建自定义视图来模仿应用程序小部件。它们比应用程序小部件更强大,因此您可以在那里做任何您想要的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接