2011-05-04 163 views
3

我想写一个简单的启动程序应用程序。在那我试图添加一个像android的默认小部件clock.I加载默认小部件的所有信息,如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.because小部件空值,我无法装入在homescreen.Can的hostview任何一个建议我用了appwidgetpicker应用程序添加在主屏幕上的小部件。

回答

1

除非启动器具有特殊权限并且是系统应用程序(允许它使用此权限),否则不能使用此功能。

有很多地方会告诉你相同的地方,只需搜索“bindAppWidgetId”即可。这里是一个例子: Binding AppWidgets to AppWidgetHost - Android 这是安全的原因。

我认为,即使对于自己的应用程序小部件,您也无法绑定。但是,您始终可以通过创建自定义视图来模拟应用程序小部件。他们比appwidgets更强大,所以你可以做任何你想做的事情。