from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from jnius import autoclass
CurrentActivity = autoclass('org.kivy.android.PythonActivity').mActivity
view = CurrentActivity.getWindow().getDecorView()
view.setKeepScreenOn(True)
class Root(RelativeLayout):
def __init__(self):
super().__init__()
class SomeApp(App):
def build(self):
return Root()
SomeApp().run()
使用android.view.Window
的不同方法时会发生相同的错误:
CurrentActivity = autoclass('org.kivy.android.PythonActivity').mActivity
WindowManager = autoclass('android.view.WindowManager$LayoutParams')
CurrentActivity.getWindow().addFlags(WindowManager.FLAG_KEEP_SCREEN_ON)
Kivy 1.10.1
Python 3.6
12-15 16:48:21.692 18623 18646 I python : Traceback (most recent call last):
12-15 16:48:21.692 18623 18646 I python : WARNING:kivy:stderr: Traceback (most recent call last):
12-15 16:48:21.693 18623 18646 I python : File "main.py", line 20, in <module>
12-15 16:48:21.693 18623 18646 I python : WARNING:kivy:stderr: File "main.py", line 20, in <module>
12-15 16:48:21.694 18623 18646 I python : view.setKeepScreenOn(True)
12-15 16:48:21.694 18623 18646 I python : WARNING:kivy:stderr: view.setKeepScreenOn(True)
12-15 16:48:21.695 18623 18646 I python : File "jnius/jnius_export_class.pxi", line 734, in jnius.JavaMethod.__call__ (jnius/jnius.c:25894)
12-15 16:48:21.695 18623 18646 I python : WARNING:kivy:stderr: File "jnius/jnius_export_class.pxi", line 734, in jnius.JavaMethod.__call__ (jnius/jnius.c:25894)
12-15 16:48:21.697 18623 18646 I python : File "jnius/jnius_export_class.pxi", line 828, in jnius.JavaMethod.call_method (jnius/jnius.c:27082)
12-15 16:48:21.697 18623 18646 I python : WARNING:kivy:stderr: File "jnius/jnius_export_class.pxi", line 828, in jnius.JavaMethod.call_method (jnius/jnius.c:27082)
12-15 16:48:21.698 18623 18646 I python : File "jnius/jnius_utils.pxi", line 93, in jnius.check_exception (jnius/jnius.c:4012)
12-15 16:48:21.698 18623 18646 I python : WARNING:kivy:stderr: File "jnius/jnius_utils.pxi", line 93, in jnius.check_exception (jnius/jnius.c:4012)
12-15 16:48:21.699 18623 18646 I python : jnius.JavaException: JVM exception occurred: Only the original thread that created a view hierarchy can touch its views.
12-15 16:48:21.699 18623 18646 I python : WARNING:kivy:stderr: jnius.JavaException: JVM exception occurred: Only the original thread that created a view hierarchy can touch its views.
12-15 16:48:21.822 18623 18646 I python : Python for android ended.
12-15 16:48:21.830 18623 18623 V SDL : onWindowFocusChanged(): false
12-15 16:48:21.833 18623 18623 V PythonActivity: onPause()
12-15 16:48:21.833 18623 18623 V SDL : onPause()
12-15 16:48:21.833 18623 18623 V SDL : nativePause()
12-15 16:48:21.833 18623 18623 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 18623 (ample.myaasdqpp)
该错误基本上意味着您正在运行 PyJNIus,并且您的应用程序在非主Thread
,这是 android 的默认行为,我相信。 如我错了请纠正我。
把它想象成一个 Kivy 主循环,它轮询各种事件,你尝试做的是sleep(1)
。 默认情况下,除非使用kivy.clock.Clock
,否则您会在 Kivy 中冻结 UI,但 Android 所做的是它不允许您执行此类操作。 您需要通过java.lang.Runnable
和android.app.Activity.runOnUiThread
在主Thread
上显式运行您的代码,例如像这个例子。
或者,你可以导入从行为android
包android.runnable.run_on_ui_thread
,但不要忘了将它添加到您的要求呢!
最有用的评论
该错误基本上意味着您正在运行 PyJNIus,并且您的应用程序在非主
Thread
,这是 android 的默认行为,我相信。 如我错了请纠正我。把它想象成一个 Kivy 主循环,它轮询各种事件,你尝试做的是
sleep(1)
。 默认情况下,除非使用kivy.clock.Clock
,否则您会在 Kivy 中冻结 UI,但 Android 所做的是它不允许您执行此类操作。 您需要通过java.lang.Runnable
和android.app.Activity.runOnUiThread
在主Thread
上显式运行您的代码,例如像这个例子。或者,你可以导入从行为
android
包android.runnable.run_on_ui_thread
,但不要忘了将它添加到您的要求呢!