2011-05-04 162 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更強大,所以你可以做任何你想做的事情。