Android 原生计步功能实现

Android 原生计步功能的实现,记录当日步数(仿微信运动),不需要后台 service。

1.概述

通过调用 Android4.4 以上系统自带的计步传感器 Sensor.TYPE_STEP_COUNTER ,实现记录当日步数的逻辑,不需要后台 service ,因自带计步传感器记录的是开机以来所有的步数,所以需要自己处理跨天分割以及开关机的问题。

2.封装

封装 StepUtil 供外界调用,以下:

1
2
3
4
5
6
7
8
9
/**
* 今日步数
*
* @param context 上下文
* @return 今日步数
*/
public static int getTodayStep(Context context) {
return (int) StepSPHelper.getCurrentStep(context);
}

3.初始化调用

在项目开启的入口处进行计步功能的初始化,以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 初始化计步服务
* 注:因初始化需要过程,正常项目中,初始化应该放在进入到主界面之前的activity中,比如闪屏页中进行初始化
* 因此本demo在第一次安装时会提示"手机暂不支持计步功能",杀死进程再次打开即可正常显示
*/
private void initStepService() {
Intent intent = new Intent(this, StepService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
startService(intent);
}
}

4.引用说明

全文引用自 Github 工程:

Github 上的顶级项目

引用备注

以下文字转载至 知乎 Angry Bugs 的文章 GitHub 上的顶级项目都是做什么的


前一阵看到同事在用一个名叫 AirFlow 的工具,而我竟然素未耳闻,一番搜索之后发现这个 工具是 Apache 的顶级项目,而且在 GitHub 上有 1w+ 的 Star。震惊之余,感觉有必要 把 GitHub 上常用工具捋一遍,以避免以后发生重复造轮子的情况。计划是把 GitHub 上 5k+ Star 的项目都知道是做什么用的,每周看 50 个,数据来源是这里:https://gitstar-ranking.com/repositories

下面是本周的记录:

教程资源类

  1. freeCodeCamp/freeCodeCamp 免费代码训练营
  2. EbookFoundation/free-programming-book 免费编程图书
  3. sindresorhus/awesome awesome 列表的列表。这个项目起源于某个人做了一个 awesome-php 的 php 优质资源 列表,然后大家就做了 awesome-python,awesome-vue 等各种列表,这个项目又把 各种 awesome 列表收集了起来。。
  4. CyC2018/CS-Notes 国人编写的计算机基础教程,中文
  5. jwasham/coding-interview-university 面试考点总结
  6. h5bp/Front-end-Developer-Interview-Questions 前端工程师面试问题
  7. vinta/awesome-python Python 的一些优质资源. 前面提到的 awesome 系列列表,不再赘述
  8. airbnb/javascript Airbnb 的 js 编码规范,值得参考。
  9. github/gitignore GitHub 提供的各种项目的 gitignore 文件模板,省了自己写了
  10. getify/You-Dont-Know-JS 前端(JS)的一些坑的总结
  11. vuejs/awesome-vue Vue 的一些优质资源. awesome 系列,不再赘述

前端 UI 框架/库

  1. twbs/bootstrap Twitter 推出的前端 UI 框架,有网格系统和各种组件,曾经常年在 GitHub 上排名第一,可以说是后端工程师画界面的利器。 竞品:Semantic UI, pure-css
  2. FontAwesome/Font-Awesome 字体和图标库,可以使用 SVG 和字体等等多种格式。
  3. ant-design/ant-design 蚂蚁金服出的 react/vue 组件库,前一阵大名鼎鼎的“圣诞彩蛋”就是这个库搞得。主要 提供 React 的组件库,用于企业中后端的后台的建设。关于 React/Vue 和前端的组 件化是一个很有意思的话题,可以查阅相关资料。 和 Bootstrap 等的区别在于,Bootstrap 更偏向于 UI 方面,是 CSS 框架,而 antd 则是完整的包括 UI 和功能在内的 React 组件。可以理解为 Bootstrap 只做了“皮”, 而 antd 是 “皮” + “骨”。
  4. Semantic-Org/Sematic-UI 和 Bootstrap 类似的一个组件库。Semantic UI 更强调使用语义化的 class 来定义样式
  5. google / material-design-icons Google 推出的 Material 风格图标库。
  6. daneden/animate.css CSS 动画效果库

大前端框架和库

  1. vuejs/vue Vue 是国人推出的一个前端框架,可以通过写不同的 Vue 组件来组成一个完整的应用, 支持服务端渲染(SSR)。和 React 一样,Vue 也使用了 Virtual-DOM 技术来提高性能。
  2. facebook/react facebook 推出的一个前端框架,特点是每个组件的 HTML/JS/CSS 组合在一起,使用 Virtual-DOM 渲染。在 React 出现之前,前端框架普遍采用了后端广泛使用的 MVC 模式,强调 HTML/JS/CSS 三者要分离,而 React 则反其道而行之,强调从组件构建, 可以说 React 的出现是前端界的一场革命。
  3. facebook/react-native 使用 React 的语法来构建 native app,注意这里并不是使用一个 iOS 或者 Android 的 WebView 中嵌套了一个 webapp,而是直接使用 JS 来操作原生组件。
  4. angular/angular.js Google 推出的前端框架,没用过
  5. reactjs/redux react.js 的一个组件,用来管理数据。
  6. meteor/meteor 前几年火过一阵,号称要统一前后端,然而我从来没搞明白到底是干啥的,如今热度已经 大减了。HN 上甚至直接有人问 Is meteor.js dead?
  7. webpack/webpack 用于打包前端资源
  8. chartjs/Chart.js 前端数据可视化组件
  9. electron 可以使用前端的工具链来编写桌面应用,同时能够跨平台。
  10. jQuery 老牌的跨浏览器兼容库。随着浏览器的发展,现在使用 jQuery 的越来越少了。
  11. create-react-app 用来构造 react app 的辅助工具。
  12. d3.js 前端数据可视化组件

后端工具

  1. elasticsearch 使用 Java 编写的一个搜索工具,要实现全文搜索的话,选择 ES 就对了。
  2. moby Docker 的内核. Docker 可以让你打包应用的所有环境, 像虚拟机一样隔离, 但是又不像虚拟机 一样过多消耗资源.

  1. ReactiveX/RxJava TODO 一种编程模式,现在还不是很了解。

机器学习

  1. TensorFlow Google 推出的深度学习库, 目前占主流地位.

语言

  1. Microsoft/TypeScript 微软推出的一个 JavaScript 的超集。我们知道 JavaScript 是一个动态弱类型的语言, 这种特性在小项目上很方便,然而随着前端项目越来越大,强类型对于程序正确性的保证 就显得越来越重要了。TypeScript 重点就在于增强了类型,甚至名字都叫 TypeScript。 强类型的语言是近年来语言的发展趋势,新语言诸如 Rust、Go、Swift 都是强类型的 语言。而一些老语言,比如 Python 也加入了 Type Hint 的功能来增强类型支持。
  2. Apple/swift Apple 推出的新语言,用来代替 Obj-C。
  3. golang Google 推出的编程语言。特点是通过 Goroutine 支持高并发。
  4. nodejs 可以在服务器上运行的 js。

通用工具类

  1. hakimel / reveal.js 使用 js 来做 PPT 的一个框架或者说工具
  2. GoogleChrome/puppeteer Google 推出的操作 Chrome 浏览器的 node.js API。可以用在自动化测试和爬虫等领域。 官方 API 的推出基本上意味着第三方工具已经失去意义了。比如说 Phantom.js 直接宣 布停止维护了。
  3. atom GitHub 推出的一个代码编辑器。
  4. oh-my-zsh zsh 的增强组件集,可以让你的 shell 异常强大, 建议刚学命令行的可以体验一下.
  5. vscode 微软推出的代码编辑工具,目前占据了市场优势地位。

Web 框架

  1. rails Ruby 的一个 MVC 模式的 web 框架,当年可谓大红大紫,现在似乎热度有所衰减了, 可能是因为大家都不写 Web 应用了。
  2. expressjs Node.js 的一个 Web 框架。
  3. http://socket.io 实现 WebSocket 的一个库,使用 node.js 编写。WebSocket 是在浏览器和服务器之间 实现全双工通信的一个协议。
  4. laravel 一个比较现代的 PHP MVC web 框架,不过 PHP 这几年的热度衰减也很厉害,好多搞 PHP 的都直接转 Go 了。

内核

  1. torvalds/linux 这个不用说了吧。评论里提到 Linux 的贡献者在 GitHub 上显示为正无穷, 厉害了.

使用Let'sEncrypt免费证书配置HTTPS

此文为将在 nginx 服务器上申请 ssl 证书以开启 https 服务的经验。。

0.转载说明

作者:知微见珠
链接:https://www.jianshu.com/p/df3c07aa9330
来源:简书

有删减。

1.安装CertBot

为了实现网站的 HTTPS 化,需要在服务器上配置 CA 证书,Let'sEncrypt 是一个免费的 CA 证书,而且提供了 Certbot 客户端方便进行安装。

1
2
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

这里遇到过一个问题:之前设置了pip的镜像地址为阿里云,导致部分 python lib下载不下来。
解决方法:

1
2
vi .pip/pip.conf
注释掉index-url=http://mirrors.aliyun.com/pypi/simple/这一行

2.安装Nginx插件

以下

1
2
3
sudo ./path/to/certbot-auto --nginx
# 也支持apache
# sudo ./path/to/certbot-auto --apache

这里也遇到一个问题:Nginx路径未加入到到环境变量,导致 certbot 找不到 nginx
解决方法:

1
2
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/local/nginx/conf/ /etc/nginx

3.检测HTTPS是否可用

此时应该已经就可以通过 https 访问你的域名了,可以到 https://www.ssllabs.com/ssltest/analyze.html?d=你的域名 检测一下

注:如果发现访问不了,请检查服务器或者 ECS 的安全组是否开启了 443 端口。

4.设置自动更新

由于 Let'sEncrypt 的证书只有90天的有效期,所以需要在失效前进行刷新,运行如下命令:

1
./path/to/certbot-auto renew

建议设置 crontab 实现定时自动刷新,如下配置了每月1号0点进行自动刷新

1
0 0 1 * * /usr/local/bin/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

以上。

5.其他问题

遇到过另一个问题是,在使用 Certbot 申请证书时,提示:

1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)

因为默认情况下,Python采用的是 ascii 编码方式,不识别中文。此时需要确定的问题是:

nginx.conf 配置文件中,不能含有任何中文字符。

如果有,通常是在注释中,将其删除即可。

另外可以在 /usr/lib/python2.7/site-packages/ 目录下添加一个 sitecustomize.py 文件,加入内容:

1
2
import sys
sys.setdefaultencoding('utf-8')

以上。

部署 HEXO 到自己的 VPS

此文为将 Hexo 部署于自己的 VPS 服务器上的经验。

0.转载说明

作者:JackYao
链接:https://www.jianshu.com/p/a8796a963fe9
来源:简书

有删减。

1.将 Hexo 安装在本机

以下:

1
2
3
4
5
npm install hexo-cli -g #全局安装hexo脚手架工具
hexo init blog #初始化项目,命名为blog
cd blog
npm install #安装依赖库
hexo server #启动nodejs服务, 访问localhost:4000可预览

2.服务器配置

2.1登录服务器

购买服务器以后,可通过ssh登录服务器操作

1
ssh root@ipaddress -p port #ipaddress和port可从供应商处获取,默认为22号端口

2.2安装相关软件

git

1
yum install git

配置git

1
2
git config --global user.email "emial地址"
git config --global user.name "用户名"

配置git仓库(通过git hook完成自动部署)

以下

1
2
3
4
5
6
7
cd /opt #进入opt目录
mkdir hexo.git #创建hexo.git文件夹
cd hexo.git
git init --bare #初始化仓库
cd hooks #进入git钩子脚本目录
touch post-receive #创建post-receive
chmod +x post-receive #增加可执行权限

post-receive文件是当接收到git提交的数据后会执行的钩子脚本,接下来需要编辑该文件。

1
vi post-receive #编辑post-receive文件

内容如下, 具体信息请看注释

1
2
3
4
5
6
7
8
9
#! /bin/bash -l
echo "接收到提交"
GIT_REPO=/opt/hexo.git # Git 项目路径(与你上面初始化的仓库地址路径相同)
TMP_GIT_CLONE=/tmp/64mb # 临时路径
PUBLIC_WWW=/var/www/html/blog/public # Web 目录
rm -rf ${TMP_GIT_CLONE} # 删除临时路径下的文件
git clone $GIT_REPO $TMP_GIT_CLONE # 将提交上来的文件 clone 到临时路径
rm -rf ${PUBLIC_WWW}/* # 删除 Web 目录下的文件
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW} # 临时路径下的文件复制到 Web 目录下

编辑完成按 esc ,输入 :wq 保存

上面脚本中将仓库转存到了 /var/www/html/blog/public 中。

Ngnix

1
yum install nginx

配置nginx

nginx 的配置文件目录可用以下命令查看

1
nginx -t

确定以后进行配置

1
cd /usr/local/nginx/conf

配置站点访问路径

1
2
touch hexo.conf #创建hexo.conf
vi hexo.conf #编辑hexo.conf文件

hexo.conf 文件内容如下,location /表示用来配置根域名的访问路径

1
2
3
4
location / {
root /var/www/html/blog/public;
index index.html;
}

之后在 nginx 的主配置文件 nginx.conf 中引入 hexo.conf ,进入编辑模式 vi nginx.conf :

1
2
3
4
5
server {
listen 80;
server_name www.yaotiancheng.cn yaotiancheng.cn;
include hexo.conf; #引入hexo.conf
}

重新加载 nginx ,使配置生效

1
nginx -s reload

推送到服务器

在本地 hexo 仓库中,打开配置文件 _config.yml,修改 deploy 字段

1
2
3
4
5
deploy:
type: git
message: 提交的信息
repo: username@域名/ipadress:git仓库地址
branch: master

需要补充说明的是:

关于 repo 字段包含三个部分

  • username: 登陆服务器用户名, 一般为root
  • 域名 / ipdaress : 已解析的域名或者服务器 ip 地址
  • git仓库地址: 此处为 /opt/hexo.git

这里需要注意的是服务器的ssh协议使用是22号端口号进行通信的。此处我们需要将服务器的端口号更改为默认值22。登陆服务器后修改配置文件。

1
vi /etc/ssh/sshd_config  #将Port字段为22

修改完成后需要重启ssh服务

1
service sshd restart

同时,还需要在 _config.yml 文件中配置 url 字段和 root 字段,否则无法找到样式文件

1
2
url: http://www.yaotiancheng.cn #主域名
root: /

之后通过命令

1
2
hexo g -d  
#输入后会提示ssh密码 输入即可

即可将文件推送到服务器

打开浏览器, 输入网址,正常显示。

Done!