分享

Launcher预设Widget 如果想在Launcher初始化时在Workspace中显示自定义或者网上下载的widget来美化我们的产品,我们需要获取Widget的ComponentName信息,

 刘恩道 2012-04-23
如果想在Launcher初始化时在Workspace中显示自定义或者网上下载的widget来美化我们的产品,我们需要获取WidgetComponentName信息,主要是包括包名和类名。如果是别人写的widget,在不知道包名和类名的情况下该如何办?这就需要破解了,http:///?p=270 我是按照这个网址提供的方法进行破解的。只需要生成jar包,用JD打开即可看到包名和类名。我是在桌面上添加了一个天气预报和数字时钟两个widget。以下是添加天气预报的代码:

 

  1. private boolean addWeatherWidget(SQLiteDatabase db, ContentValues values,TypedArray a) {  
  2.               
  3.             String packageName = a.getString(R.styleable.Favorite_packageName);  
  4.             String className = a.getString(R.styleable.Favorite_className);  
  5.             if(packageName == null || className == null){  
  6.                 return false;  
  7.             }  
  8.               
  9.             final int[] bindSources = new int[] {  
  10.                     Favorites.ITEM_TYPE_WIDGET_WEATHER,  
  11.             };  
  12.   
  13.             final ArrayList<ComponentName> bindTargets = new ArrayList<ComponentName>();  
  14.             bindTargets.add(new ComponentName(packageName,  className));  
  15.   
  16.             boolean allocatedAppWidgets = false;  
  17.   
  18.             // Try binding to an analog clock widget  
  19.             try {  
  20.                 int appWidgetId = mAppWidgetHost.allocateAppWidgetId();  
  21.   
  22.                 values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_WIDGET_WEATHER);  
  23.                 values.put(Favorites.SPANX,a.getString(R.styleable.Favorite_spanX));  
  24.                 values.put(Favorites.SPANY, a.getString(R.styleable.Favorite_spanY));  
  25.                 values.put(Favorites.APPWIDGET_ID, appWidgetId);  
  26.                 db.insert(TABLE_FAVORITES, null, values);  
  27.   
  28.                 allocatedAppWidgets = true;  
  29.                 Log.i(LOG_TAG, "addWeatherWidget -- allocatedAppWidgets = "+allocatedAppWidgets);  
  30.             } catch (RuntimeException ex) {  
  31.                 Log.e(LOG_TAG, "Problem allocating appWidgetId", ex);  
  32.             }  
  33.             // If any appWidgetIds allocated, then launch over to binder  
  34.             if (allocatedAppWidgets) {  
  35.                 launchAppWidgetBinder(bindSources, bindTargets);  
  36.             }  
  37.   
  38.             return allocatedAppWidgets;  
  39.         }   

    注意必须要调用launchAppWidgetBinder(bindSources, bindTargets);方法,否则启动widget时会提示”problem loading widget”,奇怪的是如果通过上面的方法添加数字时钟,数据库中数据添加成功,但桌面什么也没有!至今还没明白,解决方案是使用LauncherProvider 中现有的方法:addAppWidget(db,values,a)添加。

    以上都是代码的添加方式,loadFavorites是加载了/package/apps/VLauncher/res/xml文件夹下的default_workspace.xml文件,所以在default_workspace.xml文件中还需要配置相关的widget信息。我的配置如下:

  1. <weather  
  2.             launcher:packageName="com.anddoes.fancywidget.pro"         
  3.             launcher:className="com.anddoes.fancywidget.pro.FancyWeather"         
  4.             launcher:container="-100"          
  5.         launcher:screen="0"          
  6.             launcher:x="0"               
  7.             launcher:y="0"               
  8.             launcher:spanX="2"           
  9.             launcher:spanY="1"/>   

其中packageName ClassName都是破解才知道的。配置详细说明如下:

  1. <widget  
  2. launcher:packageName="..."       //widget的packageName  
  3. launcher:className=" ..."       //实现 widget的 receiver 类的名称.  
  4.     launcher:container="..."        //放置的位置(只能为desktop)  
  5.         launcher:screen="..."        //放置在第几屏上  
  6.         launcher:x="..."              //放置的x位置  
  7.         launcher:y="..."              //放置的y位置  
  8.         launcher:spanx="..."         //在x方向上所占格数  
  9.         launcher:spany="..."/>       //在y方向上所占格数  

代码完成了,编译安装即可看到效果。

安装时请注意:

    (1)通过adb push方式安装。如:adb push launcher_v1.3.3.apk /system/app ,若通过adb install launcher_v1.3.3.apk 安装会提示没有绑定widget的权限,安装过程会出现错误,并且提示“problem loading widget

    (2)安装前必须将Launcher.db数据库删除!以上就是在launcher添加widget的具体步骤了。写得不是很清晰,请指教,也祝您成功!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多