appWidget 简单入门学习笔记

简介:

1,让桌面能够添加你的appWidget

1,一个类,和2个xml


 
 
  1. //一个实现AppWidgetProvider的类   
  2. public class TomAppWidgetProvider extends  
  3.  AppWidgetProvider {   } 

 
 
  1. <!--放在 res/xml 文件夹中命名为tom_appwidget_info.xml-->  
  2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"      
  3. android:minWidth="294dp"      
  4. android:minHeight="72dp"      
  5. android:updatePeriodMillis="86400000"      
  6. android:initialLayout="@layout/tom_appwidget"      
  7. android:configure="kg.tom.AppWidgetConfigure"     > </appwidget-provider>   
  8. <!-- android:initialLayout: 初始化你的appWidget布局 --> 

 
 
  1. <!--放置在res/layout/tom_appwidget_provider.xml-->  
  2. <?xml version="1.0" encoding="utf-8"?>     
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
  4. android:layout_width="294dp"      
  5. android:layout_height="72dp"      
  6. android:orientation="vertical"    > <TextView       
  7. android:id="@+id/appwidget_text"      
  8. android:layout_width="wrap_content"      
  9. android:layout_height="wrap_content"      
  10. android:textColor="#ff000000"/>     <Button          
  11. android:id="@+id/appwidget_button"          
  12. android:layout_width="wrap_content"          
  13. android:layout_height="wrap_content"          
  14. android:text="@android:string/ok"    />     
  15. </LinearLayout> 

在AndroidManifest.xml中声明你的appWidget


 
 
  1. <receiver android:name="TomAppWidgetProvider" >       
  2. <intent-filter>   
  3. <!--让系统能够设别到你的appWidgetProvider的动作-->        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />       
  4. </intent-filter>   
  5. <!--设置你的appWidget的布局-->      
  6. <meta-data android:name="android.appwidget.provider"               android:resource="@xml/tom_appwidget_info" />   
  7. </receiver> 

长按你的Home 界面,你就会看到你的widget已经在列表当中

但是,现在点击是会出错的,这时候我们需要设置我们的AppWidgetConfigure

在activity中增加一个Intent-filter


 
 
  1. <intent-filter>               
  2. <!-- 让系统能够设别到你的appWidgetProvider的动作 -->              
  3. <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />           
  4. </intent-filter> 

 
 
  1. public class AppWidgetConfigure extends Activity {       
  2. @Override      
  3. public void onCreate(Bundle savedInstanceState) {           
  4. super.onCreate(savedInstanceState);           
  5. //设置widgetId           
  6. int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;           
  7. //1,将setResult 设置为 取消,用于取消widget host         setResult(RESULT_CANCELED);                   
  8. //2,从Intent 中找到widget 的id            
  9. Intent intent = getIntent();           
  10. Bundle extras = intent.getExtras();           
  11. if(extras != null){               
  12. mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);         }                     
  13. //3,如果获取不到 appWidget id 我们就结束           
  14. if(mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID){               
  15. Log.d("app""获取失败退出!!!");               
  16. finish();         }                               
  17. final Context context = AppWidgetConfigure.this;           
  18. //4,实例化你的 appWidget           
  19. AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);                     
  20. //5,更新widget           
  21. Intent resultValue = new Intent();         resultValue.putExtra(appWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);           
  22. setResult(RESULT_OK, resultValue);           
  23. finish();                         } } 

2,然后写provider的代码


 
 
  1. public class TomAppWidgetProvider extends AppWidgetProvider {       
  2. @Override      
  3. public void onUpdate(Context context, AppWidgetManager appWidgetManager,               
  4. int[] appWidgetIds) {           
  5. // TODO Auto-generated method stub           
  6. super.onUpdate(context, appWidgetManager, appWidgetIds);           
  7. final int N = appWidgetIds.length;           
  8. Log.d("app""onUpdate--->Ids==="+String.valueOf(N) );           
  9. for(int i=0; i < N; i++){               
  10. int appWidgetId = appWidgetIds[i];                             
  11. updateAppWidget(context, appWidgetManager, appWidgetId);         }               }             
  12. static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId){           
  13. Log.d("app""update---->id" + appWidgetId);           
  14. //1,widget中的的标题           
  15. CharSequence text = "这是我第一个widget";           
  16. //2,widget显示用布局,并设置text显示的值           
  17. RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.tom_appwidget_provider);         views.setTextViewText(R.id.appwidget_text, text);           
  18. //3,通知widget manager 更新         appWidgetManager.updateAppWidget(appWidgetId, views);               }             
  19. @Override      
  20. public void onDeleted(Context context, int[] appWidgetIds) {           
  21. // TODO Auto-generated method stub         super.onDeleted(context, appWidgetIds);           
  22. //删除的时候调用的方法           
  23. int appids = appWidgetIds.length;           
  24. Log.d("app""onDelete--->" + appids);     } } 

然后就可以运行了:

顺便附上一张简单原理图:..

2,小小的进阶为widget实现运行activity

只要在加上几行代码的appwidget 就能实现挑战到Activity的功能

1,新建一个HelloAppWidget的activity


 
 
  1. static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId){           
  2. Log.d("app""update---->id" + appWidgetId);           
  3. //1,设置显示用标题           
  4. CharSequence text = "这是我第一个widget";                     
  5. //1.1,增加跳转用activity相关 intent           
  6. Intent intent = new Intent(context, HelloAppWidget.class);           
  7. PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);           
  8. //2,如果,没有在xml中声明RemoteViews布局,这里就必须要让其他布局基于RemoteViews           
  9. RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.tom_appwidget_provider);         views.setTextViewText(R.id.appwidget_text, text);           
  10. //2.1将需要跳转的intent绑定到appWidget button中         views.setOnClickPendingIntent(R.id.appwidget_button, pendingIntent);                     
  11. //3,通知widget manager 更新         appWidgetManager.updateAppWidget(appWidgetId, views);               } 

跳转到特定activity…ps:使用activity记得在AndroidManifest.xml中注册

相关文章
|
Android开发 Swift iOS开发
iOS14新特性探索之二:App Widget小组件应用(一)
iOS14新特性探索之二:App Widget小组件应用
506 0
iOS14新特性探索之二:App Widget小组件应用(一)
|
存储 Swift iOS开发
iOS14新特性探索之二:App Widget小组件应用(二)
iOS14新特性探索之二:App Widget小组件应用
567 0
iOS14新特性探索之二:App Widget小组件应用(二)
|
机器学习/深度学习 安全 搜索推荐
盒马 app iOS 14 Widget 实践
# Widget 简介 Widget 是 iOS 14 重磅推出的新功能,使得用户可以在主屏幕添加小组件,快速浏览 app 提供的重要信息。它的设计与旧版本 macOS 的 Widget 一脉相承,甚至连添加的动画也是去掉了拟物化的水波纹效果。 ![Untitled_design__79_.png](https://intranetproxy.alipay.com/skylark/lark/0
2500 0
|
iOS开发
【iOS开发】发布 Widget App 注意事项
在被 App Store Review 拒绝了一次之后,我的一款 Today Widget App 上线了,把过程中遇到的坑分享出来。 1. 主 App 中要有内容 第一次提交 App 时,只是在 Widget 中添加了内容,主 App 中仅有教用户如何添加插件的几张图片做教程,被拒绝上架了。
1060 0
|
程序员 数据格式 XML
App Widget笔记(Mars课程)
App Widget知识 实际采用了广播机制,桌面的App Widget控件发出广播,然后我们的AppWidgetProvider对象接收广播做出相应的操作 但是注意:应用程和桌面的App Widget控件是运行在两个进程中的!!!! 注意...
747 0
|
Android开发
appWidget 增加 view
引用:http://blog.csdn.net/hmg25/article/details/6574600 我们都知道android原生的widget只支持极少数几个简单的view,所以功能及其简单。
931 0
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
682 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
742 1
|
3天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
25 6

热门文章

最新文章

下一篇
DataWorks