Enable/Disable 在 Python Kivy 中使用按钮实现全屏和唤醒锁?
Enable/Disable Fullscreen and Wakelock with a Button in Python Kivy?
我创建了一个简单的安卓应用程序,我希望用户能够在按下按钮时启用或禁用应用程序全屏和唤醒锁定。
我知道我可以在 buildozer.spec 文件中轻松地 enable/disable 这个,但是有没有办法在 [=31= 中修改这个] 用户按下按钮时的文件?
我尝试使用
从 main.py 文件编辑 buildozer.spec 文件中的特定行
if self.FullScreen:
# Check if FullScreen is False.
UpdateSpecFile = open("buildozer.spec", "r")
SpecFileLines = UpdateSpecFile.readlines()
SpecFileLines[77] = "fullscreen = 0\n"
UpdateSpecFile = open("buildozer.spec", "w")
UpdateSpecFile.writelines(SpecFileLines)
UpdateSpecFile.close()
else:
UpdateSpecFile = open("buildozer.spec", "r")
SpecFileLines = UpdateSpecFile.readlines()
SpecFileLines[77] = "fullscreen = 1\n"
UpdateSpecFile = open("buildozer.spec", "w")
UpdateSpecFile.writelines(SpecFileLines)
UpdateSpecFile.close()
# I used same function for the Wakelock
但是出现错误“没有这样的文件或目录:'buildozer.spec”。
注意:我的 buildozer.spec 是相对于 main.py 目录的。
我需要帮助,谢谢..
正如 inclement 所说,buildozer 规范在运行时不会发生任何变化。
我创建这个 class 是为了在运行时进行更改。在 class 初始化时,它将获取默认唤醒锁。使用获取方法交换状态,或释放方法和程序结束或暂停。
from jnius import autoclass
class WakeLock(object):
"""Object to create a wakelock, wake_type options are FULL, BRIGHT, DIM, PARTIAL
Constructor will default to Bright and acquire(). Use set state to switch between options,
there is no need to release or acquire when using this. Set state to None to release"""
state_dict = {'FULL': 'FULL_WAKE_LOCK',
'BRIGHT': 'SCREEN_BRIGHT_WAKE_LOCK',
'DIM': 'SCREEN_DIM_WAKE_LOCK',
'PARTIAL': 'PARTIAL_WAKE_LOCK'}
def __init__(self, activity, wake_type='BRIGHT', acquire=True):
self.tag = 'ArbitraryTag'
Context = autoclass('android.content.Context')
self.PowerManager = autoclass('android.os.PowerManager')
self.ps = activity.getSystemService(Context.POWER_SERVICE)
self.wl = None
self._set_type(wake_type)
if acquire:
self.acquire(wake_type)
def acquire(self, wake_type=None):
self.release()
if wake_type:
self._set_type(wake_type)
self.wl.acquire()
def release(self):
if self.wl.isHeld():
self.wl.release()
def _set_type(self, wake_type):
wake_lock = getattr(self.PowerManager, self.state_dict[wake_type])
self.wl = self.ps.newWakeLock(wake_lock, self.tag)
我相信为了让这些功能发挥作用,您还需要以下功能:
from android.runnable import run_on_ui_thread
from wakelock import Wakelock # our wakelock class we created
@run_on_ui_thread
def android_setflag():
PythonActivity.mActivity.getWindow().addFlags(Params.FLAG_KEEP_SCREEN_ON)
@run_on_ui_thread
def android_clearflag():
PythonActivity.mActivity.getWindow().clearFlags(Params.FLAG_KEEP_SCREEN_ON)
我在 main.build() 中创建 class 为:
def build(self):
# bunch of code
self.wakelock = WakeLock(activity, level) # FULL, PARTIAL, BRIGHT, DIM
android_setflag()
我创建了一个简单的安卓应用程序,我希望用户能够在按下按钮时启用或禁用应用程序全屏和唤醒锁定。 我知道我可以在 buildozer.spec 文件中轻松地 enable/disable 这个,但是有没有办法在 [=31= 中修改这个] 用户按下按钮时的文件? 我尝试使用
从 main.py 文件编辑 buildozer.spec 文件中的特定行 if self.FullScreen:
# Check if FullScreen is False.
UpdateSpecFile = open("buildozer.spec", "r")
SpecFileLines = UpdateSpecFile.readlines()
SpecFileLines[77] = "fullscreen = 0\n"
UpdateSpecFile = open("buildozer.spec", "w")
UpdateSpecFile.writelines(SpecFileLines)
UpdateSpecFile.close()
else:
UpdateSpecFile = open("buildozer.spec", "r")
SpecFileLines = UpdateSpecFile.readlines()
SpecFileLines[77] = "fullscreen = 1\n"
UpdateSpecFile = open("buildozer.spec", "w")
UpdateSpecFile.writelines(SpecFileLines)
UpdateSpecFile.close()
# I used same function for the Wakelock
但是出现错误“没有这样的文件或目录:'buildozer.spec”。
注意:我的 buildozer.spec 是相对于 main.py 目录的。
我需要帮助,谢谢..
正如 inclement 所说,buildozer 规范在运行时不会发生任何变化。
我创建这个 class 是为了在运行时进行更改。在 class 初始化时,它将获取默认唤醒锁。使用获取方法交换状态,或释放方法和程序结束或暂停。
from jnius import autoclass
class WakeLock(object):
"""Object to create a wakelock, wake_type options are FULL, BRIGHT, DIM, PARTIAL
Constructor will default to Bright and acquire(). Use set state to switch between options,
there is no need to release or acquire when using this. Set state to None to release"""
state_dict = {'FULL': 'FULL_WAKE_LOCK',
'BRIGHT': 'SCREEN_BRIGHT_WAKE_LOCK',
'DIM': 'SCREEN_DIM_WAKE_LOCK',
'PARTIAL': 'PARTIAL_WAKE_LOCK'}
def __init__(self, activity, wake_type='BRIGHT', acquire=True):
self.tag = 'ArbitraryTag'
Context = autoclass('android.content.Context')
self.PowerManager = autoclass('android.os.PowerManager')
self.ps = activity.getSystemService(Context.POWER_SERVICE)
self.wl = None
self._set_type(wake_type)
if acquire:
self.acquire(wake_type)
def acquire(self, wake_type=None):
self.release()
if wake_type:
self._set_type(wake_type)
self.wl.acquire()
def release(self):
if self.wl.isHeld():
self.wl.release()
def _set_type(self, wake_type):
wake_lock = getattr(self.PowerManager, self.state_dict[wake_type])
self.wl = self.ps.newWakeLock(wake_lock, self.tag)
我相信为了让这些功能发挥作用,您还需要以下功能:
from android.runnable import run_on_ui_thread
from wakelock import Wakelock # our wakelock class we created
@run_on_ui_thread
def android_setflag():
PythonActivity.mActivity.getWindow().addFlags(Params.FLAG_KEEP_SCREEN_ON)
@run_on_ui_thread
def android_clearflag():
PythonActivity.mActivity.getWindow().clearFlags(Params.FLAG_KEEP_SCREEN_ON)
我在 main.build() 中创建 class 为:
def build(self):
# bunch of code
self.wakelock = WakeLock(activity, level) # FULL, PARTIAL, BRIGHT, DIM
android_setflag()