Pyjnius: ' ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“  ์›๋ž˜ ์Šค๋ ˆ๋“œ๋งŒ ํ•ด๋‹น ๋ทฐ๋ฅผ ๋งŒ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.' android.view.Window ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 12์›” 15์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: kivy/pyjnius

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)
support upstream

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ์˜ค๋ฅ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ PyJNIus์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Android์˜ ๊ธฐ๋ณธ ๋™์ž‘์ธ ๊ธฐ๋ณธ์ด ์•„๋‹Œ Thread ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ์  ์žˆ์œผ๋ฉด ์ง€์  ํ•ด์ฃผ์„ธ์š”.

๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํด๋งํ•˜๋Š” Kivy ๋ฉ”์ธ ๋ฃจํ”„์ฒ˜๋Ÿผ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์ด ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ sleep(1) ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ kivy.clock.Clock ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ Kivy์—์„œ UI๋ฅผ ๊ณ ์ •ํ•˜์ง€๋งŒ Android๊ฐ€ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋Ÿฐ ์ž‘์—…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ ์™€ ๊ฐ™์ด java.lang.Runnable ๋ฐ android.app.Activity.runOnUiThread ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ Thread ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” android.runnable.run_on_ui_thread ์˜ android ํŒจํ‚ค์ง€์—์„œ ๋™์ž‘์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ์š”๊ตฌ ์‚ฌํ•ญ์—๋„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

>๋ชจ๋“  ๋Œ“๊ธ€

์ด ์˜ค๋ฅ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ PyJNIus์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Android์˜ ๊ธฐ๋ณธ ๋™์ž‘์ธ ๊ธฐ๋ณธ์ด ์•„๋‹Œ Thread ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ์  ์žˆ์œผ๋ฉด ์ง€์  ํ•ด์ฃผ์„ธ์š”.

๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํด๋งํ•˜๋Š” Kivy ๋ฉ”์ธ ๋ฃจํ”„์ฒ˜๋Ÿผ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์ด ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ sleep(1) ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ kivy.clock.Clock ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ Kivy์—์„œ UI๋ฅผ ๊ณ ์ •ํ•˜์ง€๋งŒ Android๊ฐ€ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋Ÿฐ ์ž‘์—…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ ์™€ ๊ฐ™์ด java.lang.Runnable ๋ฐ android.app.Activity.runOnUiThread ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ Thread ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” android.runnable.run_on_ui_thread ์˜ android ํŒจํ‚ค์ง€์—์„œ ๋™์ž‘์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ์š”๊ตฌ ์‚ฌํ•ญ์—๋„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰