中华万年历插件开发说明书江苏华易科技有限公司文件变更记录目录1.概述 (3)2.请求接口 (3)2.1请求农历: (3)2.2请求提醒: (4)2.3请求天气 (4)2.4请求自定义程序 (5)3.插件开发 (5)3.1定义广播 (5)3.2注册广播 (6)3.3创建布局文件 (7)3.4绑定布局 (7)3.5时间更新 (7)1.概述本文档适用于中华万年历桌面插件的开发,该文档为客户端功能开发提供依据和参考。
客户端端需按照本文档注明的功能点进行开发,并确保功能的可使用性。
本文档以最新版为主,新版发布后旧版自动作废。
2.请求接口请求前提:已安装中华万年历。
2.1请求农历:Cursorcur=ctx.getContentResolver().query(Uri.parse("content://cn.etouch.eca lendar.provider/nongli/"+todayString), null, null, null, null);i f(cur!=null){Bundle bundle=cur.getExtras();if(bundle!=null){widgetBean.year_n=bundle.getString("nong_year");widgetBean.month_n=bundle.getString("nong_month");widgetBean.date_n=bundle.getString("nong_date");widgetBean.year_gz=bundle.getString("nong_year_gz")+"年";widgetBean.month_gz=bundle.getString("nong_month_gz")+"月";widgetBean.date_gz=bundle.getString("nong_date_gz")+"日";}cur.close();}参数描述:/nongli/:代表请求的是农历信息。
todayString:必须为8位代表当前日期的数字,如:20100201。
参数对应数据:nong_year:农历年nong_month:农历月nong_date:农历日nong_year_gz:农历年干支nong_month_gz:农历月干支nong_date_gz:农历日干支2.2请求提醒:Cursorcur=ctx.getContentResolver().query(Uri.parse("content://cn.etouch.eca lendar.provider/tixing/"+todayString), null, null, null, null);i f(cur!=null){Bundle bundle=cur.getExtras();if(bundle!=null){widgetBean.tixing=bundle.getString("tixing");}cur.close();}参数描述:/tixing/:代表请求的是提醒信息。
todayString:必须为8位代表当前日期的数字,如:20100201。
参数对应数据:Tixing:包括日程、节日等信息。
2.3请求天气Cursorcur=ctx.getContentResolver().query(Uri.parse("content://cn.etouch.eca lendar.provider/weather/"+todayString+"/"+actionType), null, null, null, null);if(cur!=null){B undle bundle=cur.getExtras();i f(bundle!=null){String resultCode=bundle.getString("resultCode");if(resultCode.equals("1000")){widgetBean.city=bundle.getString("city");widgetBean.nowTemp=bundle.getString("nowTemp");}else if(resultCode.equals("1001")){//暂无数据}else if(resultCode.equals("1003")){//当前只有一个城市}else{//更新失败}}c ur.close();参数描述:/weather/:代表请求的是天气信息。
todayString:必须为8位代表当前日期的数字,如:20100201。
actionType:1代表获取当前城市天气,2代表刷新当前城市天气,3代表切换到下一个城市。
参数对应数据:resultCode:返回参数,1000表示成功,1001表示暂无数据,1002表示当前只有一个城市,其他值表示更新失败。
city:城市nowTemp:当前温度weather:天气信息2.4请求自定义程序Cursorcur=ctx.getContentResolver().query(Uri.parse("content://cn.etouch.eca lendar.provider/widgetSettings"), null, null, null, null);if(cur!=null){Bundle bundle=cur.getExtras();if(bundle!=null){startApplicationByPackageName(ctx,bundle.getString("packageName"), null);MyPreferences.getInstance(ctx).setIsWidgetUse24Hours(bundle.getBoolea n("IsWidgetUse24Hours"));}cur.close();}else{startApplicationByPackageName(ctx,"default", null);}参数描述:/widgetSettings:代表请求的是用户自定义信息。
参数对应数据:packageName:插件自定义区域点击事件包名。
IsWidgetUse24Hours:是否以24小时制显示时间。
3.插件开发注:为了避免在Launcher中出现插件对应的程序,需把AndroidManifest.xml中Activity对应的UNCHER属性去掉。
3.1定义广播系统自带广播:注:系统自带的广播不能修改,修改后widget将无法接收。
更新广播:android.appwidget.action.APPWIDGET_UPDATE关闭广播:android.appwidget.action.APPWIDGET_DISABLED中华万年历广播:注:中华万年历自带的广播不能修改,修改后widget将无法接收。
日期、农历、提醒更新广播:CN.ETOUCH.ECALENDAR.FESTIVAL_TASK_HAS_CHANGED天气更新广播:CN.ETOUCH.ECALENDAR.WEATHER_HAS_UPDATE开发者自定义广播:注:用户自定义的广播必须修改,否则插件更新会出现问题。
开发者通过自定义广播来实现对插件的更新,自定义广播格式参考如下:CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_CHECK包名作者用途3.2注册广播在AndroidManifest.xml中注册自己widget中使用到的广播。
如下:<receiver android:name="EcalendarWeatherWidget"android:label="万年历天气"><meta-data android:resource="@xml/ecalendar_weather_widget"android:name="android.appwidget.provider"/><intent-filter><actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/ ><actionandroid:name="android.appwidget.action.APPWIDGET_DISABLED"/><actionandroid:name="CN.ETOUCH.ECALENDAR.WEATHER_HAS_UPDATE"/><actionandroid:name="CN.ETOUCH.ECALENDAR.FESTIVAL_TASK_HAS_CHANGED"/><actionandroid:name="CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_CHECK"/><actionandroid:name="CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_STARTWEATHER"/><actionandroid:name="CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_UPDATEWEATHER"/></intent-filter></receiver>3.3创建布局文件创建布局,如下图:3.4绑定布局绑定控件,如下:RemoteViews widgetDayViews = newRemoteViews(context.getPackageName(),yout.weather_widget);widgetDayViews.setTextViewText(R.id.TextView05,widgetBean.tixing);widgetDayViews.setImageViewResource(R.id.ImageView_weather,widget Bean.weatherIconId);绑定事件,如下:Intent startPersionalPackage = newIntent("CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_STARTPERSIONALPACK AGE");PendingIntent pending0 = PendingIntent.getBroadcast(context,0,startPersionalPackage, 0);widgetDayViews.setOnClickPendingIntent(R.id.linearLayout6, pending0);3.5时间更新在某些情况下,时间的更新可能会出现问题,建议使用如下方法进行更新:启动时间更新:AlarmManager am = (AlarmManager)ALARM_SERVICEIntent intent = newIntent("CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_CHECK");PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx,0,intent, 0);long interval = 1000 * 10;long firstWake=SystemClock.elapsedRealtime()+(10000-System.currentTimeMillis() % 10000);am.setRepeating(AlarmManager.ELAPSED_REALTIME,firstWake, interval, pendingIntent);注销时间更新:AlarmManager am = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);Intent intent = newIntent("CN_ETOUCH_ECALENDAR_LJG_WEATHER_WIDGET_CHECK");PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx,0,intent, 0);am.cancel(pendingIntent);。