如何使用 Kivy 检测操作系统/外设?

Kin*_*ley 4 android python-3.x kivy

我正在和 Kivy 一起写一个程序。

在“桌面”操作系统下,使用键盘进行输入是正常的,我的代码也是这样做的。

class ProgLayout( FloatLayout ):
    def __init__(self, **kwargs):
        super( ProgLayout, self ).__init__(**kwargs)
        # Keyboard Handling (if any)
        self.keyboard = Window.request_keyboard(self.keyboard_closed, self)
        self.keyboard.bind(on_key_down=self.on_keyboard_down)
        self.keyboard.bind(on_key_up=self.on_keyboard_up)
        self.key_states = { 'up':False, 'down':False, 'left':False, 'right':False }

    def on_keyboard_down( self, keyboard, keycode, text, modifiers ):
        #print("ON_KEYBOARD_DOWN")
        #print('The key', keycode, 'have been pressed')
        #print(' - text is %r' % text)
        #print(' - modifiers are %r' % modifiers)

        junk, key = keycode
        keymap = { 'up':Directions.NORTH, 'down':Directions.SOUTH, 'left':Directions.WEST, 'right':Directions.EAST }
        if ( key in ( 'up', 'down', 'left', 'right' ) ):
            self.key_states[ key ] = True
            self.handleKeys()

    def on_keyboard_up( self, keyboard, keycode ):
        #print("ON_KEYBOARD_UP")
        junk, key = keycode
        if ( key in ( 'up', 'down', 'left', 'right' ) ):
            self.key_states[ key ] = False
            self.handleKeys()
Run Code Online (Sandbox Code Playgroud)

然而,当应用程序在 Android 下启动时(我怀疑),打开键盘会导致屏幕键盘出现。显然,软键盘可以被忽略,但更好的解决方案是仅在存在硬件键盘时才打开键盘 - 或者只是不自动将其用于 Android。

有没有办法确定 Kivy 上是否存在物理键盘?

有没有办法确定我的应用程序是否在 Android 上运行(啊,我猜platform.system()或者sys.platform)。

sys编辑:如果我将或包含platform在清单中,buildozer 无法构建 .APK buildozer.spec。尽管如此,导入sys似乎仍然有效。但在我的 Android 平板电脑上,sys.platform报告“linux”,所以这不是前进的道路。

Kin*_*ley 7

正如评论者@Erik指出的那样,确定当前平台的解决方案是kivy.utils.platform

\n
from kivy.utils import platform\n\n...\n\nif ( kivy.utils.platform != \'android\' ):\n    # open the keyboard, since we\'re not android\n
Run Code Online (Sandbox Code Playgroud)\n

正如文档所述:

\n
\n

标识当前操作系统的字符串。它是以下之一: \xe2\x80\x98win\xe2\x80\x99、\xe2\x80\x98linux\xe2\x80\x99、\xe2\x80\x98android\xe2\x80\x99、\xe2\x80\x98macosx \xe2\x80\x99、\xe2\x80\x98ios\xe2\x80\x99 或 \xe2\x80\x98unknown\xe2\x80\x99。

\n
\n