/_2016/to-sort/getting-the-battery-level-and-battery-state-of-the-device.py

https://github.com/tdamdouni/Pythonista · Python · 332 lines · 257 code · 48 blank · 27 comment · 14 complexity · dcc5e469f9247da6e64fb3320542b0ea MD5 · raw file

  1. # coding: utf-8
  2. # Captured from: _https://forum.omz-software.com/topic/1951/getting-the-battery-level-and-battery-state-of-the-device_
  3. def get_battery_level():
  4. '''[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]]
  5. [[UIDevice currentDevice] batteryLevel];
  6. [[UIDevice currentDevice] batteryState];
  7. '''
  8. UIDevice = cls('UIDevice')
  9. currentDevice = msg(UIDevice, c_void_p, 'currentDevice')
  10. msg(currentDevice,None,'setBatteryMonitoringEnabled:',[c_bool],True)
  11. b=msg(currentDevice,c_float,'batteryLevel')
  12. return b
  13. ###==============================
  14. # coding: utf-8
  15. from ctypes import cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  16. c = cdll.LoadLibrary(None)
  17. def get_current_device():
  18. c.sel_registerName.restype = c_void_p
  19. c.sel_registerName.argtypes = [c_char_p]
  20. c.objc_getClass.restype = c_void_p
  21. c.objc_getClass.argtypes = [c_char_p]
  22. UIDevice = c.objc_getClass('UIDevice')
  23. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  24. c.objc_msgSend.restype = c_void_p
  25. device = c.objc_msgSend(UIDevice, c.sel_registerName('currentDevice'))
  26. return device
  27. def set_battery_monitoring_enabled(flag):
  28. device = get_current_device()
  29. c.objc_msgSend.argtypes = [c_void_p, c_void_p, c_bool]
  30. c.objc_msgSend.restype = None
  31. c.objc_msgSend(device, c.sel_registerName('setBatteryMonitoringEnabled:'), c_bool(flag))
  32. def get_battery_level():
  33. device = get_current_device()
  34. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  35. c.objc_msgSend.restype = c_float
  36. battery_level = c.objc_msgSend(device, c.sel_registerName('batteryLevel'))
  37. return battery_level
  38. def get_battery_state():
  39. device = get_current_device()
  40. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  41. c.objc_msgSend.restype = c_int
  42. battery_state = c.objc_msgSend(device, c.sel_registerName('batteryState'))
  43. return battery_state
  44. def main():
  45. set_battery_monitoring_enabled(True)
  46. battery_level = get_battery_level()
  47. print 'Battery Level: %0.1f<p>&#8217; % (battery_level * 100.0,)
  48. battery_state = get_battery_state()
  49. states = {0: &#8216;unknown&#8217;, 1: &#8216;unplugged&#8217;, 2: &#8216;charging&#8217;, 3: &#8216;full&#8217;}
  50. print &#8216;Battery State: %i (%s)&#8217; % (battery_state, states.get(battery_state))
  51. set_battery_monitoring_enabled(False)</p>
  52. <p>if <strong>name</strong> == &#8216;<strong>main</strong>&#8217;:
  53. main()</p>
  54. <h1>==============================</h1>
  55. <p>import contextlib</p>
  56. <p>@contextlib.contextmanager
  57. def battery_monitoring_enabled():
  58. set_battery_monitoring_enabled(True)
  59. yield
  60. set_battery_monitoring_enabled(False)</p>
  61. <h1>==============================</h1>
  62. <p>def main():
  63. with battery_monitoring_enabled():
  64. battery_level = get_battery_level()
  65. print &#8217;Battery Level: %0.1f</p>' % (battery_level * 100.0,)
  66. battery_state = get_battery_state()
  67. states = {0: 'unknown', 1: 'unplugged', 2: 'charging', 3: 'full'}
  68. print 'Battery State: %i (%s)' % (battery_state, states.get(battery_state))
  69. ###==============================
  70. # coding: utf-8
  71. #See: http://omz-forums.appspot.com/pythonista/post/5776493279969280
  72. import contextlib
  73. from ctypes import cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  74. c = cdll.LoadLibrary(None)
  75. objc_types = cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  76. return_types = list(objc_types) + [None]
  77. def objc_call(return_type, obj, sel_name, *args):
  78. assert return_type in return_types, '{} is an invalid return type.'.format(return_type)
  79. assert isinstance(sel_name, basestring), '{} is an invalid sel_name.'.format(sel_name)
  80. arg_types = [c_void_p, c_void_p]
  81. if args:
  82. fmt = 'arg[{}] has an invalid arg_type: {}.'
  83. for i, arg in enumerate(args):
  84. arg_type = type(arg)
  85. assert arg_type in objc_types, fmt.format(i, arg_type)
  86. arg_types.append(arg_type)
  87. c.objc_msgSend.argtypes = arg_types
  88. c.objc_msgSend.restype = return_type
  89. return c.objc_msgSend(obj, c.sel_registerName(sel_name), *args)
  90. def get_current_device():
  91. c.sel_registerName.restype = c_void_p
  92. c.sel_registerName.argtypes = [c_char_p]
  93. c.objc_getClass.restype = c_void_p
  94. c.objc_getClass.argtypes = [c_char_p]
  95. UIDevice = c.objc_getClass('UIDevice')
  96. return objc_call(c_void_p, UIDevice, 'currentDevice')
  97. def set_battery_monitoring_enabled(flag):
  98. objc_call(None, get_current_device(), 'setBatteryMonitoringEnabled:', c_bool(flag))
  99. import contextlib
  100. @contextlib.contextmanager
  101. def battery_monitoring_enabled():
  102. set_battery_monitoring_enabled(True)
  103. yield
  104. set_battery_monitoring_enabled(False)
  105. def get_battery_level():
  106. return objc_call(c_float, get_current_device(), 'batteryLevel')
  107. def get_battery_state():
  108. return objc_call(c_int, get_current_device(), 'batteryState')
  109. def main():
  110. with battery_monitoring_enabled():
  111. battery_level = get_battery_level()
  112. print 'Battery Level: %0.1f%%' % (battery_level * 100.0,)
  113. battery_state = get_battery_state()
  114. states = {0: 'unknown', 1: 'unplugged', 2: 'charging', 3: 'full'}
  115. print 'Battery State: %i (%s)' % (battery_state, states.get(battery_state))
  116. if __name__ == '__main__':
  117. main()
  118. ###==============================
  119. import contextlib
  120. @contextlib.contextmanager
  121. def battery_monitoring_enabled():
  122. set_battery_monitoring_enabled(True)
  123. try:
  124. yield
  125. finally:
  126. set_battery_monitoring_enabled(False)
  127. ###==============================
  128. from objc_util import *
  129. device = ObjCClass('UIDevice').currentDevice()
  130. device.setBatteryMonitoringEnabled_(True)
  131. print 'Battery level:', device.batteryLevel()
  132. device.setBatteryMonitoringEnabled_(False)
  133. ctype# --------------------
  134. def get_battery_level():
  135. '''[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]]
  136. [[UIDevice currentDevice] batteryLevel];
  137. [[UIDevice currentDevice] batteryState];
  138. '''
  139. UIDevice = cls('UIDevice')
  140. currentDevice = msg(UIDevice, c_void_p, 'currentDevice')
  141. msg(currentDevice,None,'setBatteryMonitoringEnabled:',[c_bool],True)
  142. b=msg(currentDevice,c_float,'batteryLevel')
  143. return b
  144. # --------------------
  145. # coding: utf-8
  146. from ctypes import cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  147. c = cdll.LoadLibrary(None)
  148. def get_current_device():
  149. c.sel_registerName.restype = c_void_p
  150. c.sel_registerName.argtypes = [c_char_p]
  151. c.objc_getClass.restype = c_void_p
  152. c.objc_getClass.argtypes = [c_char_p]
  153. UIDevice = c.objc_getClass('UIDevice')
  154. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  155. c.objc_msgSend.restype = c_void_p
  156. device = c.objc_msgSend(UIDevice, c.sel_registerName('currentDevice'))
  157. return device
  158. def set_battery_monitoring_enabled(flag):
  159. device = get_current_device()
  160. c.objc_msgSend.argtypes = [c_void_p, c_void_p, c_bool]
  161. c.objc_msgSend.restype = None
  162. c.objc_msgSend(device, c.sel_registerName('setBatteryMonitoringEnabled:'), c_bool(flag))
  163. def get_battery_level():
  164. device = get_current_device()
  165. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  166. c.objc_msgSend.restype = c_float
  167. battery_level = c.objc_msgSend(device, c.sel_registerName('batteryLevel'))
  168. return battery_level
  169. def get_battery_state():
  170. device = get_current_device()
  171. c.objc_msgSend.argtypes = [c_void_p, c_void_p]
  172. c.objc_msgSend.restype = c_int
  173. battery_state = c.objc_msgSend(device, c.sel_registerName('batteryState'))
  174. return battery_state
  175. def main():
  176. set_battery_monitoring_enabled(True)
  177. battery_level = get_battery_level()
  178. print 'Battery Level: %0.1f%%' % (battery_level * 100.0,)
  179. battery_state = get_battery_state()
  180. states = {0: 'unknown', 1: 'unplugged', 2: 'charging', 3: 'full'}
  181. print 'Battery State: %i (%s)' % (battery_state, states.get(battery_state))
  182. set_battery_monitoring_enabled(False)
  183. if __name__ == '__main__':
  184. main()
  185. # --------------------
  186. ctype# --------------------
  187. import contextlib
  188. @contextlib.contextmanager
  189. def battery_monitoring_enabled():
  190. set_battery_monitoring_enabled(True)
  191. yield
  192. set_battery_monitoring_enabled(False)
  193. # --------------------
  194. main()# --------------------
  195. with# --------------------
  196. def main():
  197. with battery_monitoring_enabled():
  198. battery_level = get_battery_level()
  199. print 'Battery Level: %0.1f%%' % (battery_level * 100.0,)
  200. battery_state = get_battery_state()
  201. states = {0: 'unknown', 1: 'unplugged', 2: 'charging', 3: 'full'}
  202. print 'Battery State: %i (%s)' % (battery_state, states.get(battery_state))
  203. # --------------------
  204. with# --------------------
  205. set_battery_monitoring_enabled(False)# --------------------
  206. with# --------------------
  207. objc_call(return_type, obj, sel_name, *args)# --------------------
  208. get_current_device()# --------------------
  209. get_battery_level()# --------------------
  210. get_battery_state()# --------------------
  211. set_battery_monitoring_enabled()# --------------------
  212. :# --------------------
  213. set_battery_monitoring_enabled()# --------------------
  214. # coding: utf-8
  215. #See: http://omz-forums.appspot.com/pythonista/post/5776493279969280
  216. import contextlib
  217. from ctypes import cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  218. c = cdll.LoadLibrary(None)
  219. objc_types = cdll, c_void_p, c_char_p, c_int, c_bool, c_float
  220. return_types = list(objc_types) + [None]
  221. def objc_call(return_type, obj, sel_name, *args):
  222. assert return_type in return_types, '{} is an invalid return type.'.format(return_type)
  223. assert isinstance(sel_name, basestring), '{} is an invalid sel_name.'.format(sel_name)
  224. arg_types = [c_void_p, c_void_p]
  225. if args:
  226. fmt = 'arg[{}] has an invalid arg_type: {}.'
  227. for i, arg in enumerate(args):
  228. arg_type = type(arg)
  229. assert arg_type in objc_types, fmt.format(i, arg_type)
  230. arg_types.append(arg_type)
  231. c.objc_msgSend.argtypes = arg_types
  232. c.objc_msgSend.restype = return_type
  233. return c.objc_msgSend(obj, c.sel_registerName(sel_name), *args)
  234. def get_current_device():
  235. c.sel_registerName.restype = c_void_p
  236. c.sel_registerName.argtypes = [c_char_p]
  237. c.objc_getClass.restype = c_void_p
  238. c.objc_getClass.argtypes = [c_char_p]
  239. UIDevice = c.objc_getClass('UIDevice')
  240. return objc_call(c_void_p, UIDevice, 'currentDevice')
  241. def set_battery_monitoring_enabled(flag):
  242. objc_call(None, get_current_device(), 'setBatteryMonitoringEnabled:', c_bool(flag))
  243. import contextlib
  244. @contextlib.contextmanager
  245. def battery_monitoring_enabled():
  246. set_battery_monitoring_enabled(True)
  247. yield
  248. set_battery_monitoring_enabled(False)
  249. def get_battery_level():
  250. return objc_call(c_float, get_current_device(), 'batteryLevel')
  251. def get_battery_state():
  252. return objc_call(c_int, get_current_device(), 'batteryState')
  253. def main():
  254. with battery_monitoring_enabled():
  255. battery_level = get_battery_level()
  256. print 'Battery Level: %0.1f%%' % (battery_level * 100.0,)
  257. battery_state = get_battery_state()
  258. states = {0: 'unknown', 1: 'unplugged', 2: 'charging', 3: 'full'}
  259. print 'Battery State: %i (%s)' % (battery_state, states.get(battery_state))
  260. if __name__ == '__main__':
  261. main()
  262. # --------------------
  263. 'setBatteryMonitoringEnabled:'# --------------------
  264. import contextlib
  265. @contextlib.contextmanager
  266. def battery_monitoring_enabled():
  267. set_battery_monitoring_enabled(True)
  268. try:
  269. yield
  270. finally:
  271. set_battery_monitoring_enabled(False)
  272. # --------------------
  273. from objc_util import *
  274. device = ObjCClass('UIDevice').currentDevice()
  275. device.setBatteryMonitoringEnabled_(True)
  276. print 'Battery level:', device.batteryLevel()
  277. device.setBatteryMonitoringEnabled_(False)
  278. # --------------------