窗口小部件的使用AppWidget
2015-09-10 22:45
459 查看
最近复习了下Appwidget的使用,做了个简单的案例
创建一个widget能够时时刷新时间,并能点击按钮实现代码的交互
知识梳理:
APPwidget是一个系统级服务,Appwidget在安装应用或页面启动会扫描系统所有已安装的Apk清单文件,发现清单中有AppWidgetProvider的子类会有响应
其中AppWidgetProvider并不是内容提供者,而是继承BroadCastReceiver
效果如图;
开发步骤
① 布局Layout
② 创建AppWidgetProvider
③ 配置<receiver
④ 描述文件
布局
创建 一个类继承AppWidgetProvider
配置
描述文件
创建一个服务
实现小部件调用代码需要用广播来处理
为什么使用到广播来处理事件?
点击是在桌面程序的widget是一个进程
处理代码却在 另外一个进程,只有广播与aidl可以跨进程使用。
创建一个广播测试widget通过广播实现与代码的交互
创建一个widget能够时时刷新时间,并能点击按钮实现代码的交互
知识梳理:
APPwidget是一个系统级服务,Appwidget在安装应用或页面启动会扫描系统所有已安装的Apk清单文件,发现清单中有AppWidgetProvider的子类会有响应
其中AppWidgetProvider并不是内容提供者,而是继承BroadCastReceiver
效果如图;
开发步骤
① 布局Layout
② 创建AppWidgetProvider
③ 配置<receiver
④ 描述文件
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="100dp" android:background="#3366FF" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="widget按钮" /> </RelativeLayout>
创建 一个类继承AppWidgetProvider
package com.itheima.appwidgett; import android.appwidget.AppWidgetProvider; public class MyAppWidgetReceiver extends AppWidgetProvider { }
配置
<!-- 在清单文件配置widget --> <receiver android:name="com.itheima.widget.receiver.MyWidagetReceiver" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_appwidget_info" />
描述文件
描述文件:创建一个xml ,并如下配置 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/view_appwidget" android:minHeight="100dp" android:minWidth="200dp" android:previewImage="@drawable/biz_weight4x1" android:resizeMode="horizontal|vertical" android:updatePeriodMillis="1000" > </appwidget-provider><!-- android:minWidth最小宽度 --> <!-- minHeight最小高度 --> <!-- updatePeriodMillis 86400000 毫秒 =24小时 每隔半小时 Service+Timer --> <!-- previewImage预览图片 --> <!-- resizeMode 拉伸 -->
创建一个服务
public class WidgetService extends Service { private Timer timer; private TimerTask timerTask; @Override public void onCreate() { Log.i("wlz", "WidgetService---创建"); timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { // SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date date = new Date(); String time = simpleDateFormat.format(date); Log.i("wls", time); RemoteViews remoteView=new RemoteViews("com.itheima.appwidgett", R.layout.view_appwidget); //setTextViewText 实现 findViewById setText remoteView.setTextViewText(R.id.button1, time); //PendingIntent:点击式的Intent // setOnClickPendingIntent 实现 findViewById setOnClick Intent intent=new Intent();//widget点击事件让程序执行一段代码通过发送广播完成 intent.setAction("com.itheima.widget.action.UPDATE"); PendingIntent pIntent=PendingIntent.getBroadcast(getBaseContext(), 0, intent, 0); remoteView.setOnClickPendingIntent(R.id.button1, pIntent); //com.itheima.widget.receiver.MyWidagetReceiver // RemoteView:不是真正的View 用于进程间的对view操作。 ComponentName name=new ComponentName("com.itheima.appwidgett", "com.itheima.appwidgett.MyAppWidgetReceiver"); //刷新widget AppWidgetManager.getInstance(getBaseContext()).updateAppWidget(name, remoteView); // AppWidgetManager.getInstance(getBaseContext()).updateAppWidget(更新的widget的类名, } }; timer.schedule(timerTask, 0, 1000); } @Override public void onDestroy() { Log.i("wlz", "WidgetService---销毁"); if(timer!=null) { timer.cancel(); timer=null; } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } }
实现小部件调用代码需要用广播来处理
为什么使用到广播来处理事件?
点击是在桌面程序的widget是一个进程
处理代码却在 另外一个进程,只有广播与aidl可以跨进程使用。
创建一个广播测试widget通过广播实现与代码的交互
public class WidgetClickReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "AAAAAAAA", Toast.LENGTH_LONG).show(); } }
相关文章推荐
- Android 学习第11课,android 实现拨打电话的功能
- POJ 2486 Apple Tree
- android 自定义view 让文字飞起来
- iOS NSAarray的initWithArray:copyItems:方法
- Android 酷炫来袭:制作属于你自己的音频播放器(综合运用MediaPlayer、Service、Broadcast、ListView、SeekBar)
- Android学习——其他View
- android点击空白区域隐藏软键盘
- Android Api Demos登顶之路(六十三)Content-->Resources Smallest Width
- IOS XMPP 学习笔记
- iOS-画板程序(手势操作无)
- iOS-沙盒
- Android常见问题2:Resources$NotFoundException(1)
- android开发遇到的奇葩坑
- LeetCode:Happy Number
- 为什么选择CocoaPods进行iOS代码的管理
- (3)实体和结构【利用objective-c的runtime特性,结合FMDB实现轻量级的ORM】
- ios开发一些零碎的知识点(一)
- 色相(H)饱和度(S)明度(L)与RGB的转换以及在android上的试验
- 安卓判断是否首次进入app,通过判断跳转欢迎引导界面和主界面
- 安卓开发中Theme.AppCompat.Light报错的解决方法