起因
最近发现给老爸买的安卓手机, 电池出现了点问题, 充电只能充到 60%, 还每次都弹出这烦人的警告. 感觉这是设计好的, 整整好好用了 3 年, 这未免有点太巧了吧?
算了, 直接给老爸换了个新手机, 我就把旧的留下了. 无奈旧手机太多, 能用的旧安卓机就这一个, 总觉得不废物利用一下, 很是不爽.
于是, 我想起手机有震动功能, 要是做一个震动 App, 或许能变废为宝?
准备
好, 说干就干, 于是我开始了第一次安卓 App 的开发之旅.
首先是要到官网去下载 Android Studio, 这步需要一定的上网技能, 建议把技能点数加满.
花了大约 1 分钟的时间, 终于把 Android Studio 下载下来了, 随后安装过程也相当简单, 装完后, 选了我喜欢的浅色主题, 应该就可以用了.
设计
实际开发前, 理论上还需要做一些设计工作, 但这实在不是我的强项啊! 界面设计就算了吧, App 里就一个开关, 打开就震动, 关掉就停.
不过图标好歹还是要有一个的, 但是找了全网, 没有太合适的, 只能在 Material Design 官网找一个图标的设计模板, 自己去做一个.
无奈没有任何基础, 用 Ai 硬撸了两个小时, 终于做出了一个稍微满意的图标, 当然, 是以蓝色为主.
开发
接下来就可以进行开发了, 打开安装好的 Android Studio, 创建一个新项目, 随便选了一个 Empty Activity.
然后要进行一些配置, 名字还是要好认的, 比较洋气的 Vibrator, 包名就随便起一个吧. 语言嘛, 纠结了一下, 最后选择了没用过的 Kotlin, 尝尝鲜. SDK 就定为 API 21, Android 5.0 的吧, 现在用 4.x 的应该不多了, 5.0 的 API 也够用.
然后它就给我自动创建了一些文件, 刚开始 Gradle 会做一些准备工作, 下载依赖花了一些时间, 这步也需要强大的上网技能.
接上手机, 开启 USB 调试模式. 一般 "开发人员选项" 这页, 是通过多次点击系统版本号激活的, 感觉有点像游戏秘籍啊, 这技巧还是以前刷机积累下来的经验.
打开了 USB 调试模式并连接上手机后, Android Studio 就多出来一个运行目标了.
我先点个运行试试, 通过手机上各种允许操作, 我的 App 装上去了, 虽然还是空白, 图标也不太好看, 但起码能运行了起来.
接下来开始硬撸代码, 先在页面上, 把那个 Hello World 换成我的 Switch, 暂且就叫 switchButton 吧, 把文本去掉, 弄上跟 Hello World 一样的上下左右约束. 一切都是可视化的, 鼠标操作, 找回了一点以前 Netbeans 编辑 Swing 界面的感觉, 现在还有了深浅两种模式的预览.
接下来该考虑的就是怎样在代码里获取到这个 Switch, 网上查了一下, Kotlin 里一句 findViewById < 类型 >(R.id. 名称) 即可, 代码提示还能自动补全按钮名称. 紧跟着写一段按钮状态变化的事件监听, 具体内容先空着, 等会用到.
最后就是实现具体的手机震动了, 老规矩, 网上搜一搜, 搜到了一个 Stack Overflow 的回答, 应该挺靠谱. 简单来说就是在 AndroidManifest.xml 加上权限声明, 然后通过 getSystemService 获取震动服务, 最后, 震它!
Stack Overflow 上的那个例子虽然是 Java, 改成 Kotlin 应该也不难, 尝试了一下, 还真和 AnctionScript,Swift 有点像, 类型后置, as 关键字. 最后代码被我写成了这个样子, 虽说 vibrate 这个方法 Android Studio 提示我说已经被废弃了, 但先这么用着吧, 应该可以用吧?
这期间 Android Studio 有个体贴的小细节, 都不用我去手动改权限声明的配置文件, 鼠标点一下他就给我加上了.
噢, 最后别忘了我的 App 图标.
在 AndroidManifest.xml 里配置了一下, 行号后面都把图标给显示出来了?
完工
运行了一下, 完美. 我还在想, 应该怎么能展示震动呢? 放了个小东西在屏幕上, 或许你们能感受到吧.
这里放不了视频吗? 放个链接吧
简单的震动 App 这就完成了, 或许以后还能加入各种风格的震动: 缠绵, 激情, 点阵式......
但是这手机震动也太弱了, 最后, 我想到了身边的 PS4 手柄, 这形状也比手机要好的多......!
源码和 apk 我都放到 GitHub 上了, 感兴趣的同学, 点击领取 https://github.com/learning/vibrator/releases , 别忘了点个 follow 哦!
来源: https://segmentfault.com/a/1190000022328675