• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:03-18

按键精灵安卓版
立即下载

软件版本:3.3.6
软件大小:62.5M
更新时间:01-16

按键精灵iOS版
立即下载

软件版本:1.5.9
软件大小:29.2M
更新时间:06-11

最新企业版UiBot
立即下载

软件版本:3.3
软件大小:282M
更新时间:08-06

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
返回列表 12345678» / 12
发新话题 回复该主题

从零学起之安卓篇《豆比小闹钟Niko》 [复制链接]

1#
本帖最后由 兄弟工程师05 于 2014-7-9 18:05 编辑

本期主题:如何用脚本编写一个闹钟程序。
题材缘由:由于近期(省略100字,不是球迷,不看球赛)所以常常睡过头,至此写了个脚本来提醒自己起床上班,完成时我随手给取了个名字Niko,大家无视吧。
重点需知:有的小朋友可能会说,手机有自带闹钟啊,但作为一个资深上班族来告诉你,不管什么样的闹钟,迟早会被自己无视。


优缺对比:
优点:可以通过判断网络连接名称确认手机真实位置,来控制是否无限制的闹铃下去。
首先,把硬件停止脚本功能关闭,只由触屏展开功能浮窗的方式来启动或关闭,这样可以很大程度杜绝还未完全清醒的自己把闹钟一拍继续梦游。
其二,脚本只要未被正确的方式结束,则坚挺着执行代码命令,一直播放音乐来制造噪音,为了安全起见,在播放音乐时如判断到屏幕被关闭或画面变动,则等待一分钟后继续吵闹!不然就循环播放音乐。(啦啦啦德玛西亚,啦啦啦蛮王开大……)
注:脚本播放音乐时,脚本被停止,音乐是无法被关闭的,所以作为闹铃的音乐建议不超过15秒,以免某些暴躁的小朋友把自家手机砸飞……
缺点:昨晚睡前测试,手机运行脚本待机到早上9点报警,直至我在9点26分完全清醒关闭脚本,大约把电量消耗掉了接近20%,看来我又得换个方式来解决这个严峻的问题了。


进入正题,脚本思路:通过获取手机系统时间进行判断,到达上班时间后,通过判断手机的WLAN连接名称来确认我是在家里还是已外出或到公司;还在家里则死命的播放音乐(德玛西亚!)来强迫自己清醒,脚本设定判断在播放音乐时如果画面被关闭(屏幕关闭或离开WLAN界面,则休息一分钟后,继续播放。

源码展示:由于这脚本属于个人手机专用,所以无需考虑多分辨率比例换算问题,模块中我去除了“换算比例”,此外源码中的多点点阵特征信息是属于我个人手机主题的图像特征,不适用于他人。如果你们有兴趣,可以复制回家,理解我代码框架思路后,自行补充自己手机的图像特征信息替换上即可。
相关资料:
关于图色判断相关资料说明
从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
关于如何把手机图片导入PC按键抓抓来获取多点找色的点阵特征信息
从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》
关于……(自己看标题)
从零学起之安卓篇《独立APK小精灵制作流程介绍》


【源码抢鲜看,看完点个赞!】
UI源码部分:
  1. 界面1:
  2. {
  3. 水平布局:
  4. {
  5. 输入框:
  6. {
  7. 注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  8. 名称:"小时",
  9. 提示内容:"提示用户应该输入什么内容",
  10. 初始文本:"9",
  11. 仅输入数字:true,
  12. 文字大小:0,
  13. 最大输入长度:0,
  14. 高度:0,
  15. 宽度:100
  16. },
  17. 文字框:
  18. {
  19. 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  20. 名称:"文字框1",
  21. 显示内容:"时",
  22. 文字大小:0,
  23. 高度:0,
  24. 宽度:0
  25. },
  26. },
  27. 水平布局:
  28. {
  29. 输入框:
  30. {
  31. 注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  32. 名称:"分钟",
  33. 提示内容:"提示用户应该输入什么内容",
  34. 初始文本:"15",
  35. 仅输入数字:true,
  36. 文字大小:0,
  37. 最大输入长度:0,
  38. 高度:0,
  39. 宽度:100
  40. },
  41. 文字框:
  42. {
  43. 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  44. 名称:"文字框1",
  45. 显示内容:"分",
  46. 文字大小:0,
  47. 高度:0,
  48. 宽度:0
  49. },
  50. },
  51. }
复制代码
脚本源码部分:
  1. /////////////////////////////////////////////////////////////////////////////
  2. '定义一些常用变量:IntX IntY 找色模块返回值用,win_x win_y 屏幕分辨率用,win_w win_h 分辨率比例用
  3. Dim IntX,IntY
  4. Dim win_x,win_y
  5. win_x = GetScreenX()
  6. win_y = GetScreenY()
  7. TracePrint "当前分辨率:" & win_x & "*" & win_y
  8. SetControlBarPos 0.5
  9. Randomize
  10. /////////////////////////////////////////////////////////////////////////////
  11. '定义一些常用变量,加刮号是为了定义变量类型为数组类型
  12. Dim 锁屏图标(),解锁坐标(),设置图标(),全部设置(),WLAN选项(),WLAN界面(),公司网络(),家里网络()
  13. /////////////////////////////////////////////////////////////////////////////
  14. 锁屏图标=Array(360,621,"FFFA43","0|34|FFFA43,13|611|FFFA43,-62|598|FFFA43",0.9)
  15. 解锁坐标=Array(100,100,300,100)
  16. 设置图标=Array(52,850,"FFFFA7","105|0|FFFFA1,64|135|FFFFFF",0.9)
  17. 全部设置=Array(494,83,"CBC6B4","0|11|CCC7B4,0|17|CAC6B4,35|2|CCC7B4,64|21|C8C4B4,90|9|CBC7B4",0.9)
  18. WLAN选项=Array(80,502,"B1AFAB","0|8|B1AFAB,0|16|B1AFAB,0|24|B1AFAB,139|15|D8D7D5",0.9)
  19. WLAN界面=Array(36,99,"DDDBD1","66|-11|FFFFFF,88|12|FFFFFF,120|-11|FFFFFF,159|13|FFFFFF",0.9)
  20. 公司网络=Array(75,414,"C55F20","21|0|C55F20,-12|16|C55F20,2|16|C55F20,9|16|C55F20,23|16|C55F20,15|25|C55F20,37|10|3A372B,37|13|C55F20,37|16|3C382C,81|12|C55F20,97|9|C55F20,97|23|C55F20,101|17|3A372B,5|51|9D9C96",0.9)
  21. 家里网络=Array(73,416,"C55F20","-9|12|C55F20,1|23|C55F20,17|0|C55F20,17|22|C55F20,30|22|C55F20,39|14|C55F20,118|14|C55F20,141|7|C55F20,188|11|C55F20,204|11|C55F20,232|11|C55F20,246|15|C55F20,246|19|3C382C",0.9)
  22. /////////////////////////////////////////////////////////////////////////////
  23. '获取UI界面设置参数
  24. Dim ui_str,txt_hour,txt_minute
  25. ui_str="Niko,上班时间:"
  26. txt_hour=Int(ReadUIConfig("小时",9))
  27. txt_minute=Int(ReadUIConfig("分钟",10))
  28. ShowMessage ui_str & txt_hour & "时" & txt_minute & "分"
  29. //Delay 3000
  30. Dim txt_path
  31. txt_path="/sdcard/lolBoxCache/lolBoxSound/commSoundNames/Common_啦啦啦德玛西亚"
  32. /////////////////////////////////////////////////////////////////////////////
  33. '调试区
  34. //TracePrint Join(设置图标,",")
  35. //KeepCapture
  36. //TracePrint 判断(设置图标)
  37. //TracePrint IntX&"|"&IntY
  38. //ReleaseCapture
  39. //EndScript
  40. /////////////////////////////////////////////////////////////////////////////
  41. '主线循环
  42. Do
  43. Call 上班时间(txt_hour,txt_minute)
  44. KeepCapture
  45. If 判断(锁屏图标)=True Then
  46. TracePrint "解锁"
  47. KeyPress "Power"
  48. Delay 1000
  49. Call 触屏划动(解锁坐标)
  50. ElseIf 判断点击延时消失(设置图标,3)=True Then
  51. ElseIf 判断点击延时消失(全部设置,3)=True Then
  52. TracePrint "全部设置"
  53. ElseIf 判断点击延时消失(WLAN选项,3)=True Then
  54. TracePrint "WLAN选项"
  55. ElseIf 判断(WLAN界面)=True Then
  56. TracePrint "WLAN界面"
  57. If 判断(公司网络)=True Then
  58. TracePrint "公司网络"
  59. ElseIf 判断(家里网络)=True Then
  60. TracePrint "家里网络"
  61. Call 制造噪音(txt_path)
  62. End If
  63. Else
  64. KeyPress "Home"
  65. TracePrint "未知界面"
  66. End If
  67. Delay 1000 '循环中适当的延时给予CPU响应时间,使脚本更为流畅
  68. Loop
  69. '功能模块
  70. Sub 制造噪音(路径)
  71. Dim i
  72. '这里因为我手机里正好有三个音乐文件:Common_啦啦啦德玛西亚1.mp3,Common_啦啦啦德玛西亚2.mp3,Common_啦啦啦德玛西亚3.mp3,所以这里用了点随机数,来随机播放音乐。
  73. PlaySound 路径 & Int(3*Rnd()+1) & ".mp3"
  74. For i=15 To 0 Step -1
  75. ShowMessage "该上班了!要迟到了!快起床啦![" & i & "]"
  76. Delay 1000
  77. '中途判断到画面变动,则休息一分钟后继续闹铃。
  78. KeepCapture
  79. If 判断(家里网络)=False Then
  80. For i=60 To 0 Step -1
  81. ShowMessage "倒计" & i & "秒后继续报警!"
  82. Delay 1000
  83. Next
  84. Exit For
  85. End If
  86. Next
  87. End Sub
  88. '功能模块
  89. Sub 上班时间(时,分)
  90. Dim str,arr()
  91. Do
  92. str=Now()
  93. ShowMessage "Niko:" & str
  94. arr=Split(str," ")
  95. arr=Split(arr(3),":")
  96. If Int(arr(0)) >= 时 Then If Int(arr(1)) >= 分 Then Exit Do
  97. Delay 1000
  98. Loop
  99. End Sub
  100. /////////////////////////////////////////////////////////////////////////////
  101. '固定模块
  102. Sub 返回桌面结束脚本(提示内容)
  103. ShowMessage 提示内容 & ",脚本停止!"
  104. Delay 3000
  105. KeyPress "Home"
  106. EndScript
  107. End Sub
  108. Sub 触屏划动(数组特征)
  109. Dim arr(),n
  110. arr=数组特征
  111. n=Int(10*Rnd())
  112. TouchDown arr(0)+n,arr(1)+n,1
  113. TouchMove arr(2)+n,arr(3)+n,1,1
  114. Delay 500
  115. TouchUp 1
  116. Delay 100
  117. End Sub
  118. Function 判断(数组)
  119. 判断=False
  120. Dim arr()
  121. arr=数组
  122. If IsNumeric(arr(3))=True Then
  123. If InStr(1,Join(arr,","),"|")>0 Then
  124. 判断=FindMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5),arr(6))
  125. Else
  126. 判断=FcEx(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5))
  127. End If
  128. ElseIf IsNumeric(arr(1))=True Then
  129. 判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4))
  130. End If
  131. End Function
  132. Sub 点击(数组)
  133. Dim arr()
  134. arr=数组
  135. Tap arr(0), arr(1)
  136. End Sub
  137. Function 判断延时消失(数组,秒)
  138. 判断延时消失=False
  139. Dim t
  140. t=Time()
  141. Do
  142. Delay 1000
  143. KeepCapture
  144. If 判断(数组)=False Then
  145. 判断延时消失=True
  146. Exit Do
  147. End If
  148. Loop Until Time()-t > 秒
  149. End Function
  150. Function 判断点击延时消失(数组,秒)
  151. 判断点击延时消失=False
  152. If 判断点击(数组)=True Then
  153. 判断点击延时消失=判断延时消失(数组,秒)
  154. End If
  155. End Function
  156. Function 判断点击(数组)
  157. 判断点击=False
  158. If 判断(数组)=True Then
  159. Tap IntX,IntY
  160. 判断点击=True
  161. End If
  162. End Function
  163. /////////////////////////////////////////////////////////////////////////////
  164. '本脚本相关教程资料(都是重点,想学就把我的教程看完,如不懂可以各大按键群(官方群)里联系我)
  165. '从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
  166. 'http://bbs.anjian.com/thread-523396-1-1.html
  167. '从零学起之基础核心《麻雀虽小五脏俱全》
  168. 'http://bbs.anjian.com/thread-509172-1-1.html
  169. /////////////////////////////////////////////////////////////////////////////
  170. '判断两个16进制值相似度是否到达对应百分比
  171. Function IsCol(col1,col2,n)
  172. IsCol=False
  173. Dim r1,g1,b1
  174. Dim r2,g2,b2
  175. ColorToRGB col1,r1,g1,b1
  176. ColorToRGB col2,r2,g2,b2
  177. If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True
  178. End Function
  179. '固定坐标单点模糊找色
  180. Function CmpCol(x,y,col,n)
  181. CmpCol=False
  182. If x < 0 or y < 0 Then Exit Function
  183. Dim temp_col
  184. temp_col=GetPixelColor(x,y)
  185. If temp_col=col Then
  186. CmpCol=True
  187. Else
  188. CmpCol=IsCol(col,temp_col,n)
  189. End If
  190. End Function
  191. '固定坐标多点模糊找色
  192. Function CmpMultiCol(x,y,col,str,n)
  193. CmpMultiCol=False
  194. IntX=x
  195. IntY=y
  196. If CmpCol(x,y,col,n)=True Then
  197. If MultiColor(x,y,str,n)=True Then
  198. CmpMultiCol=True
  199. Exit Function
  200. End If
  201. End If
  202. CmpMultiCol=FindMultiCol(x-1,y-20,x+1,y+20,col,str,n)
  203. End Function
  204. '区域范围多点模糊找色
  205. Function FindMultiCol(x1,y1,x2,y2,col,str,n)
  206. FindMultiCol=False
  207. FindMultiColor x1,y1,x2,y2,col,str,0,n,intX,intY
  208. If IntX >=0 Then FindMultiCol=True
  209. End Function
  210. '多点偏移点阵匹配
  211. Function MultiColor(x,y,str,n)
  212. MultiColor=False
  213. Dim arr1,i,arr2(),x1,y1
  214. arr1=Split(str,",")
  215. For Each i In arr1
  216. arr2=Split(i,"|")
  217. x1=x+Int(arr2(0))
  218. y1=y+Int(arr2(1))
  219. If x1 < 0 or y1 < 0 or x1 > win_x or y1 > win_y Then Exit Function
  220. If CmpCol(x1,y1,arr2(2),n)=False Then Exit Function
  221. Next
  222. MultiColor=True
  223. End Function
  224. //////////////////////////////////////////////////////////////////////////////////////////
  225. '自定义固定模块组合应用,以下部分大家请理解函数模块功能作用后自行组合使用。(请理解后调用,以免出错都不懂原因)
  226. Function Cm(x,y,col,str)
  227. Cm=CmEx(x,y,col,str,0.9)
  228. End Function
  229. Function CmEx(x,y,col,str,n)
  230. KeepCapture
  231. CmEx=CmpMultiCol(x,y,col,str,n)
  232. ReleaseCapture
  233. End Function
  234. Function Fm(x1,y1,x2,y2,col,str)
  235. Fm=FmEx(x1,y1,x2,y2,col,str,0.9)
  236. End Function
  237. Function FmEx(x1,y1,x2,y2,col,str,n)
  238. KeepCapture
  239. FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)
  240. ReleaseCapture
  241. End Function
  242. Function Fc(x1,y1,x2,y2,col)
  243. Fc=FcEx(x1,y1,x2,y2,col,0.9)
  244. End Function
  245. Function FcEx(x1,y1,x2,y2,col,n)
  246. FcEx=False
  247. FindColor x1,y1,x2,y2,col,0,n,intX,intY
  248. If intX >= 0 Then FcEx=True
  249. End Function
  250. //////////////////////////////////////////////////////////////////////////////////////////
复制代码

2#

正是我想要的。

3#

xxxxxxxxxxxxxxxx谢谢了

4#

该红红火火

5#

11111111111111111

6#

阿什顿违规反而噶尔嘎哈

7#
8#

来膜拜一下

9#

看看源码~

10#

看看再说 谢谢分享

11#


12#

谢谢楼主(ง •̀_•́)ง(ง •̀_•́)ง(ง •̀_•́)ง(ง •̀_•́)ง(ง •̀_•́)ง(ง •̀_•́)ง

13#

为了看到源代码和申请的思路而来的

14#

看源码

15#

界面到底怎么弄,不会啊

16#

ffffffffffffffffffffffffffffffff

17#

好东西,顶起来

18#

我看看

19#

感谢 看看

20#


o(∩_∩)o...哈哈!!!
发新话题 回复该主题