Android widget桌面插件
2016-03-24 07:33
405 查看
概述
android 中桌面插件主要依赖于AppWidget框架。涉及类:AppWidgetProvider :BroadcastRecevier子类,用于接收更新,删除通知
AppWidgetProvderInfo:AppWidget相关信息(大小,更新频率等),xml形式
AppWidgetManger:AppWidget管理类,用于向provider发送消息
RemoteViews:可以在其他进程中运行的类,用于向provider发送通知。
实现步骤
声明AndroidManifest定义初始化 xml 文件
定义 widget布局Layout xml文件
继承AppWidgetProvider,实现相关逻辑
AndroidManifest.xml:
<receiver android:name="ExampleAppWidgetProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" /> </receiver>
其中,APPWIDGET_UPDATE是必须的,用于接收broadcast。
meta-data声明了AppWidgetProviderInfo对应的资源 xml 的位置,其中包括Widget 的 xml 布局文件、刷新频率、最小宽高
res/xml/example_appwidget_info
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen"> </appwidget-provider>
minWidth & minHeight:定义了 Widget 的最小宽高
updatePeriodMillis:定义了 Widget 的刷新频率
initialLayout:Widget 的布局 Layout 文件
previewImage:当用户选择添加 Widget 时的预览图片
configure:添加Widget时弹出的Widget配置activity,没有则不设置
resizeMode:水平和垂直方向是否可以调整大小,horizontal,vertical,none,horizontal|vertical
widgetCategory: Widget 可以显示的位置, home_screen(桌面),keyguard(锁屏,5.0以上)
更多详细属性可以参考 AppWidgetProviderInfo。
ExampleAppWidgetProvider:
public class ExampleAppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; // Create an Intent to launch ExampleActivity Intent intent = new Intent(context, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); // Get the layout for the App Widget and attach an on-click listener // to the button RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); // Tell the AppWidgetManager to perform an update on the current app widget appWidgetManager.updateAppWidget(appWidgetId, views); } } }
Configuration Activity
<activity android:name=".ExampleAppWidgetConfigure"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> </intent-filter> </activity>
添加widget时弹出的activity,需要添加android.appwidget.action.APPWIDGET_CONFIGURE过滤器。
注意事项:
Activity 必须返回带 EXTRA_APPWIDGET_ID 的 result。
声明Configuration Activity 后 onUpdate() 在 Widget 添加时不会被调用,Activity 需要调用 AppWidgetManager.updateAppWidget() 完成 Widget 更新。
Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.example_appwidget); appWidgetManager.updateAppWidget(mAppWidgetId, views); Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish();
参考:
App Widgets
Android 开发之 App Widget 详解
相关文章推荐
- Android 简单实现ListView顶部悬浮效果
- 实现Android自定义ListView过程中出现的一些问题,要注意了,不能再犯!
- Android自定义控件系列案例【二】
- android学习——实现欢迎界面图片动画滑动切换
- Android学习之仿QQ侧滑功能的实现
- android中ListView控件&&onItemClick点击事件
- 【Android】Android Studio 1.5+ 中混合调试Native和Java代码
- 【Android】Android Studio 1.5+ 中混合调试Native和Java代码
- Android中使用java.util.Properties犯的错
- Android开发 全面解析Activity生命周期
- Android监听——回调模式与观察者模式
- Android中Handler源码解析(一)
- Android延迟执行PostDelayed
- UltimateAndroid
- android开发零基础入门教程
- Android - 文件读写操作 总结
- Android SDK Manager 更新代理配置
- 选择蜂窝教育Android培训 即可无忧学习
- android 实现FTPServices 文件传输,支持IPV6
- Android群英传笔记——第六章:Android绘图机制与处理技巧