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()
Kesalahan yang sama terjadi ketika menggunakan metode yang berbeda dari 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)
Kesalahan pada dasarnya berarti Anda menjalankan PyJNIus, dan aplikasi Anda, dalam Thread
non-utama yang merupakan perilaku default untuk Android, saya percaya. Koreksi saya jika saya salah.
Bayangkan itu seperti loop utama Kivy yang melakukan polling untuk berbagai acara dan apa yang Anda coba lakukan adalah seperti sleep(1)
. Secara default Anda akan membekukan UI Anda di Kivy kecuali menggunakan kivy.clock.Clock
, tetapi apa yang dilakukan Android adalah tidak mengizinkan Anda melakukan hal seperti itu. Anda harus menjalankan kode Anda secara eksplisit pada Thread
melalui java.lang.Runnable
dan android.app.Activity.runOnUiThread
, misalnya seperti contoh ini .
Atau, Anda bisa mengimpor perilaku dari paket android
di android.runnable.run_on_ui_thread
, tetapi jangan lupa untuk menambahkannya ke kebutuhan Anda juga!
Komentar yang paling membantu
Kesalahan pada dasarnya berarti Anda menjalankan PyJNIus, dan aplikasi Anda, dalam
Thread
non-utama yang merupakan perilaku default untuk Android, saya percaya. Koreksi saya jika saya salah.Bayangkan itu seperti loop utama Kivy yang melakukan polling untuk berbagai acara dan apa yang Anda coba lakukan adalah seperti
sleep(1)
. Secara default Anda akan membekukan UI Anda di Kivy kecuali menggunakankivy.clock.Clock
, tetapi apa yang dilakukan Android adalah tidak mengizinkan Anda melakukan hal seperti itu. Anda harus menjalankan kode Anda secara eksplisit padaThread
melaluijava.lang.Runnable
danandroid.app.Activity.runOnUiThread
, misalnya seperti contoh ini .Atau, Anda bisa mengimpor perilaku dari paket
android
diandroid.runnable.run_on_ui_thread
, tetapi jangan lupa untuk menambahkannya ke kebutuhan Anda juga!