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小组件应用
477 0
iOS14新特性探索之二:App Widget小组件应用(一)
|
存储 Swift iOS开发
iOS14新特性探索之二:App Widget小组件应用(二)
iOS14新特性探索之二:App Widget小组件应用
551 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
2467 0
|
iOS开发
【iOS开发】发布 Widget App 注意事项
在被 App Store Review 拒绝了一次之后,我的一款 Today Widget App 上线了,把过程中遇到的坑分享出来。 1. 主 App 中要有内容 第一次提交 App 时,只是在 Widget 中添加了内容,主 App 中仅有教用户如何添加插件的几张图片做教程,被拒绝上架了。
1051 0
|
程序员 数据格式 XML
App Widget笔记(Mars课程)
App Widget知识 实际采用了广播机制,桌面的App Widget控件发出广播,然后我们的AppWidgetProvider对象接收广播做出相应的操作 但是注意:应用程和桌面的App Widget控件是运行在两个进程中的!!!! 注意...
739 0
|
Android开发
appWidget 增加 view
引用:http://blog.csdn.net/hmg25/article/details/6574600 我们都知道android原生的widget只支持极少数几个简单的view,所以功能及其简单。
922 0
|
4天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
7天前
|
XML 移动开发 前端开发
使用duxapp开发 React Native App 事半功倍
对于Taro的壳子,或者原生React Native,都会存在 `android` `ios`这两个文件夹,而在duxapp中,这些文件夹的内容是自动生成的,那么对于需要在这些文件夹中修改的配置内容,例如包名、版本号、新架构开关等,都通过配置文件的方式配置了,而不需要需修改具体的文件
|
7天前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
下一篇
无影云桌面