如何在桌面添加AppWidget

 

   本人第一次写博客,为了做个纪念,特此说明...

   今天我来和大家分享下,怎样将AppWidget添加到界面上。

   将AppWidget放到桌面上,需要两个必要参数ComponentName,AppWidgetId,拿到ComponentName我们一般直接可以使用ComponentName cn = new ComponentName(packageName, className);即可,这个我就不说的很详细了,第二步我们就的拿到一个AppWidgetId,怎样获得呢?在Launcher工程中就可以通过LauncherAppWidgetHost.java 这个类来得到,它是直接继承了AppWidget·Host类,使用它的方法mAppWidgetHost.allocateAppWidgetId()可以得到AppWidgetId,好了现在我们拿到了两个必要的参数,最后我们的通过方法AppWidgetManager.getInstance(this)拿到一个AppWidgetManager实例,并调用该实例的方法appWidgetManager.bindAppWidgetId(appWidgetId, cn);将两个参数绑定到一起即可,当然这还不够...具体做法参照以下代码.

 

ContentResolver cr = this.getContentResolver();
  
  PackageManager packageManager = getPackageManager();
  String packageName = packagename;
        String className = classname;

        boolean hasPackage = true;
        ComponentName cn = new ComponentName(packageName, className);
        try {
            packageManager.getReceiverInfo(cn, 0);
        } catch (Exception e) {
            String[] packages = packageManager.currentToCanonicalPackageNames(
                    new String[] { packageName });
            cn = new ComponentName(packages[0], className);
            try {
                packageManager.getReceiverInfo(cn, 0);
            } catch (Exception e1) {
                hasPackage = false;
            }
        }

        if (hasPackage) {
            int spanX = 2;
            int spanY = 2;
        }
  
  ContentValues values = new ContentValues();
  
   boolean allocatedAppWidgets = false;
         final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);

         try {
             int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
            
             values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPWIDGET);
             values.put(Favorites.SPANX, 2);
             values.put(Favorites.SPANY, 2);
             values.put(Favorites.APPWIDGET_ID, appWidgetId);
             values.put(Favorites.CONTAINER, -100);
             values.put(Favorites.CELLX, cellX);
             values.put(Favorites.CELLY, cellY);
             values.put(Favorites.SCREEN, 1);
            
             cr.insert(LauncherSettings.Favorites.CONTENT_URI , values);
            
             allocatedAppWidgets = true;
            
             appWidgetManager.bindAppWidgetId(appWidgetId, cn);
         } catch (RuntimeException ex) {
             Log.e(TAG, "Problem allocating appWidgetId", ex);
         }
        
         return allocatedAppWidgets;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值