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

        放假回家后着实无聊了点,刚好小米到手就学了下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共享网络的信息...用java

API判断是否能连上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的所有库,可以从这里查询你要的

你可能感兴趣的:(Android)