Как добавить виджет в коде на домашний экран - PullRequest
4 голосов
/ 04 мая 2011

Я пытаюсь написать простое приложение запуска. В нем я пытаюсь добавить виджет по умолчанию, например часы 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. Из-за того, что я не могу загрузить представление хоста в homescreen.Can любой может предложить мне добавить виджет в домашний экран без приложения appwidgetpicker.

1 Ответ

1 голос
/ 22 апреля 2012

такая функция не может быть использована, если программа запуска не имеет специального разрешения и не является системным приложением (которое позволит ему использовать это разрешение).

Есть множество мест, которые скажут вам то же самое, просто выполнив поиск "bindAppWidgetId". вот пример: Привязка виджетов приложения к AppWidgetHost - Android причина этого в безопасности.

Я думаю, что даже для ваших собственных виджетов приложения вы не можете связывать. тем не менее, вы всегда можете имитировать виджеты приложений, создавая вместо них собственные представления. они обладают гораздо большей мощностью, чем приложения, поэтому вы можете делать там все, что пожелаете.

...