您的位置:首页 > 移动开发

Android appWidget——每日一句应用开发

2012-01-16 18:16 295 查看
        放假回家后着实无聊了点,刚好小米到手就学了下android开发,做点自己需要的应用,纯Android新人,还请高手指点。        学习加上开发这个widget前后算起来也快半个月了,目前已有一个比较完整的功能,不过还有待增加功能与代码重构等,现在先放出这个版本与朋友们交流。        效果图、源码与apk文件放在最下面,有需要的朋友自行下载。  这次做的主要一个功能是用appWidget展示一个英语、日语的每日一句,并可以发音阅读, 数据来源为沪江(本文仅为学习所用,任何人不得以本文及所含代码用作商业用途,违者责任自负)。沪江已经有了一个每日一句的,但是是Activity,个人感觉麻烦,便做了个widget的。其中使用到的包括:app widget的布局以及开发,广播,sqlite数据库,服务的使用,以及沪江提供的每日一句服务等。下面就遇到的些问题做个记录以便以后有机会深入研究android再回来查看,有高手愿意解答也万分感激。1.appWidget的更新是通过接收广播完成好还是通过AppWidgetManager在服务中直接更新好个人感觉服务仅仅用来做数据处理就行,处理完数据将结果广播出去,谁要数据谁接收便是,但不知道在服务中调用AppWidgetManager进行更新widget有无什么好处?2.intent的extras出现数据混乱的问题,最后改用data uri这个问题不止一次出现,是bug问题还是我没用好..应该是没用好大致问题就是,可以看到下面效果图中有一个英语日语切换点击,和一个上下翻页的东西,点击事件Intent中带extras都出现数据不对的问题比如,英语注册切换到英语的事件,日语注册切换到日语的事件都new出来的Intent放入PendingIntent.getService,都带有不同的extras,但是第一次促发英语事件以后即使以后促发日语的事件也传的英语的数据,第一次促发日语事件以后也是日语的,实在没找出原因,跟进源码跟到第一步就找不到源码了...先记下来,以后再解决。出现后弄了很久没解决,只好去搜了下,有个老外也遇到类似的问题,改用data uri解决的http://stackoverflow.com/questions/4064937/remoteviews-and-setonclickpendingintent我也试了下,放在data uri后面都可以正确解析到3.appWidget的textView滚动效果(如果开启服务更新是否开销过大)因为一个页面放不下太多内容,想弄个scroll,但是不支持额。。有说开个定时任务让他自动滚动,也可以开个服务更新,都是一个原理,而且要不停更新,不知道吃电量大不大,毕竟手机上考虑的最起码的吃电和流量。最后还是决定给个上下翻页的按钮了,见效果图。4.sqlite有无ORM框架这个对象属性一多,写起DAO真麻烦,无论查询还是插入,求个好用的框架。。。5.appWidget的布局宽高问题 http://www.eoeandroid.com/sdk/api/guide/practices/ui_guidelines/widget_design.html http://www.eoeandroid.com/sdk/api/guide/topics/appwidgets/index.html 看这两篇guide吧 6种widget布局,做界面真心不会,这里也不多说了。。看我那效果图,好听点说干净朴实啊6.appWidget启动服务时,如果服务未结束时再启动同一个服务,这两个服务为同一个对象 startId不同 可以利用服务不结束再请求该服务都不会再新建对象了,好像eoe特刊里面有一期提到了服务的生命周期,只是扫了下没仔细看,刚开始写服务时不知道会使用同一个对象,都写的私有成员,吃了不少亏,这个地方代码中还是用的私有成员,没有改过来,先记下有时间再说。7.分层问题 数据层中分页数据时考虑了显示宽度问题 服务层中考虑了appWidget更新刚开始准备着手做这个东西时还各种层都考虑了怎么分,虽然最后做出来的还是有层次结构,比如service、数据以及显示,但是功底不够,一个不知道分的对不对,二个即使按照自己分的是对的,在数据层还是参进去了界面(比如分页显示要根据字体宽度判断,这个给写在分页的数据层了- -),还有许多其他问题有待改进。8.关于LocalBroadcastManager的使用什么作用查API吧,这里记下我的问题,用LocalBroadcastManager发广播时必须得注册接收者仅仅使用intent-filter貌似不起作用?可以从SDK上的extras下找到android support package,maven库上好像没有android-support-v4.jar包。。9.关于网络是否存在的判断网上大多都如下判断网络是否存在,不知道是否有人验证过是否一定准确
public static boolean checkInternet(Context paramContext)
{
NetworkInfo localNetworkInfo = ((ConnectivityManager) paramContext
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (localNetworkInfo != null)
{
boolean hasNet = localNetworkInfo.isAvailable();
return hasNet;
}
return false;

}
今天无聊测试了下用USB绑定电脑共享网络,用上面的方法是验证无网络,目前的android API貌似获取不到USB共享网络的信息...用javaAPI判断是否能连上host也许可以吧,没有尝试
10.还有许多可以增加的功能和改进的地方比如添加一个Activity读取以前已更新过的数据,清除已更新下来的数据,下载时弄个进度条提示等等,不一一列举,有兴趣在这代码上修改的请随意,如果可以,改完发我一份一起学习交流~以后我有时间对这个代码有功能改进也会在这里更新模拟器上的效果:这个是APP WIDGET的添加界面 初始状态                       点击英语获取到英语的当天数据        点击日语获取到日语的当天数据,并做了分页                  正在播放发音两张小米上的截图:        PS:由于本身写给自己用的,界面上没做太多,但是极力的在电量和流量的控制上做了许多工作,比如服务的开关,下载后存储到数据库等,测试了下,一天的英语加日语加上对应的MP3耗流量106K,如果不点击播放不会下载MP3。下载没有提示的,如果要使用的话这个地方也需要注意。当天数据如果没更新过,没有网络时点击没有任何效果。然后目前的版本放到真机后,屏幕比电脑小多,在一块小区域内要放入很多元素,在点击英语和日语时可能出现没点击到对应的textview导致没有反应- - 有待改进,自己拿去改也行。源码,eclipse工程:http://download.csdn.net/detail/zhouyuqwert/4024341单独APK文件:http://download.csdn.net/detail/zhouyuqwert/4024342 其实源码bin/下面有了        修正1.修正一处,由于真机上点击着实麻烦,范围过小,现在增加了点击范围,将选择语言换成Activity透明背景选择,现在在真机上点击下图所示区域都可,非常容易点击到修正1(点击区域的修改).源码。APK下载地址:http://download.csdn.net/detail/zhouyuqwert/4024728另外再记录下关于maven的android工程,先前看有人在java区问到过,一起在这里聊下:maven库里面提供了三个工程,如下介绍,用介绍的创建工程后eclipse:eclipse再导入到eclipse用吧https://github.com/akquinet/android-archetypes/wiki部署也简单,install 打包apk   android:redeploy卸载再部署  android:deploy部署clean install android:redeploy一起用便是,自动重新部署上去了http://mvnrepository.com/这里是maven的所有库,可以从这里查询你要的
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息