Li.Stony

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

需求

我一直想要个这样的 App:随时随地记录下我的位置。

虽然很多 App 都有这样的功能,但是很遗憾,都不满足我的需求。我只希望要一个能简单纪录位置的App,不想要那些不需要的功能。而且位置信息非常隐私,我不想暴露给其他人。最后,我的这些位置数据最好在我的掌控下,如果第三方App不再维护了,丢掉这些宝贵的数据将是非常痛心的。

除此之外,我还有个非常渴望的需求,市面上居然没有一个 App 满足。是什么呢?我想要能随时查询历史天气。或许大家觉得,未来的天气才是最重要的,过去的天气没用,其实不然。往大里说,可以分析气候变迁、统计数据。往小里说,可以把当天的天气和日记联系起来,更好的回顾某天发生的事情。我当然是不想每天打字纪录天气情况的,当然要有个 App 自动做这件事。

为此,我准备开发一个自己的App,名字叫做 MyLife,只为满足我自己的需求。我选择在 Android 平台开发,因为最不离身的设备就是我的手机了。数据保存在 outlook 日历中,这样也可以随时随地同步了。当我查看的时候,位置和天气信息就和当天的日程联系起来了,非常有助于加深大脑中的记忆。如果以后需要分析这些数据,也可以非常容易的导出。

 

实现

定位 SDK

我不喜欢用百度的东西,在中国,地图相关的,另一个比较好的选择就是高德了吧。果然高德的sdk使用起来非常简单,当然也是准确的。

天气 API

尝试了好几个sdk,最后发现都不好用。最后决定使用免费的 Yahoo Weather API 。因为官方描述太少只能 google 所需资料了。

最后发现,下面这样的请求非常能满足我的需要。

private final String baseUrl = "https://query.yahooapis.com/v1/public/yql?format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q=";

private final String paramFmt = "select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"%s, %s\") and u='c'";

 

啥意思呢?

  • format=json 表示返回的是 json 格式的
  • u='c' 表示温度单位是℃,同时速度单位是 km/h
  • where text=%s, %s 我是填写的 city 和 country (可以是中文的),因为我已经使用了定位sdk查到了位置。

最后请求时的完整url 如下所示

 String param = String.format(paramFmt, loc.city, loc.country);

 String encodeParam = Uri.encode(param);

 String fullUrl = baseUrl + encodeParam;

 

 

下面是天气 code 的定义,官方的很难找,使用的时候翻译成优雅的中文就好了

https://gist.github.com/bzerangue/805520

读写日历

以前我没有接触过 ContentResolver,其实按文档来就好了。

AlarmManager

关于AlarmManager 文档很多。需要注意的就是,在执行期间需要请求 WakeLock,否则执行不完 CPU 就重新 sleep 了。

GitHub

Talk is cheap, Show me the code.

https://github.com/li-stony/lz_life

 

成果

(手机是英文系统,所以除高德SDK返回的位置是中文外,其它都是英文)

可以手动 Pin 天气和位置到选择的日历中,也可以每天早上6:15 自动添加天气和位置到日历中。

posted on 2016-06-22 10:42  Li.Stony  阅读(209)  评论(0编辑  收藏  举报