دکمه‌های فیزیکی

دستگاه پوشیدنی معمولاً دارای چندین دکمه فیزیکی است که به آن‌ها ساقه‌ها نیز گفته می‌شود. دستگاه‌های Wear OS همیشه حداقل یک دکمه دارند: دکمه روشن/خاموش. علاوه‌براین، ممکن است صفر یا چند دکمه چندمنظوره وجود داشته باشد. برخی‌از دستگاه‌ها دکمه کناری چرخان فیزیکی نیز دارند.

در برنامه‌تان می‌توانید دکمه‌های چندمنظوره را به کنش‌هایی اختصاص دهید که وقتی برنامه در پیش‌زمینه است انجام شوند. برای مثال، برنامه تناسب اندام ممکن است تمرین را بااستفاده از دکمه‌های چندمنظوره شروع یا موقتاً متوقف کند:

ساعتی با چند دکمه کناری. سیستم یکی از دکمه‌ها را به‌عنوان دکمه چندمنظوره تعیین می‌کند.
شکل ۱. برنامه تناسب اندام Wear OS که دکمه‌های چندمنظوره را نشان می‌دهد.

برای موارد استفاده مناسب و ملاحظات طراحی، به اصول طراحی Wear OS مراجعه کنید.

این سند نحوه بازیابی اطلاعات درباره دکمه‌های چندمنظوره دردسترس در دستگاه و نحوه پردازش فشار دکمه‌ها را شرح می‌دهد.

فراداده دکمه

برای دریافت اطلاعات بیشتر درباره دکمه‌های دستگاه، از API تعریف‌شده در کتابخانه Wear Input AndroidX استفاده کنید. وابستگی زیر را در فایل build.gradle واحد برنامه خود اضافه کنید:

dependencies {
implementation "androidx.wear:wear-input:1.2.0"
}

تعداد دکمه‌ها

تعیین کنید چند دکمه در دستگاه دردسترس است، از روش WearableButtons.getButtonCount() استفاده کنید. این روش شامل دکمه روشن/خاموش می‌شود، بنابراین اگر روش مقدار <0x0A>بزرگ‌تر از یک برگرداند، دکمه‌های چندمنظوره برای استفاده دردسترس است. برای دریافت تعداد دقیق دکمه‌های چندمنظوره قابل‌تخصیص، یک دکمه از تعداد کل کم کنید، زیرا دکمه اول همیشه دکمه روشن/خاموش است.

کدهای کلید برای فشار دادن دکمه

هر دکمه به یک ثابت int از کلاس KeyEvent اختصاص داده می‌شود، همان‌طور که در جدول زیر نشان داده شده است:

دکمه KeyEvent
دکمه چندمنظوره ۱ KEYCODE_STEM_1
دکمه چندمنظوره ۲ KEYCODE_STEM_2
دکمه چندمنظوره ۳ KEYCODE_STEM_3

کد نمونه زیر نحوه دریافت تعداد دکمه‌های دردسترس را نشان می‌دهد:

val count = WearableButtons.getButtonCount(context)

if (count > 1) {
    Log.d(TAG, "More than one button available")
}

val buttonInfo = WearableButtons.getButtonInfo(
    activity,
    KeyEvent.KEYCODE_STEM_1
)

if (buttonInfo == null) {
    // KEYCODE_STEM_1 is unavailable
    Log.d(TAG, "KEYCODE_STEM_1 not available")
} else {
    // KEYCODE_STEM_1 is present on the device
    Log.d(TAG, "KEYCODE_STEM_1 is present on the device")
}

مدیریت فشار دکمه‌ها

چندین کد کلید دکمه‌ای وجود دارد که برنامه شما می‌تواند آن‌ها را مدیریت کند:

  • KEYCODE_STEM_1.
  • KEYCODE_STEM_2.

برنامه شما می‌تواند این کدهای کلید را دریافت کند و آن‌ها را به کنش‌های درون‌برنامه‌ای خاص تبدیل کند.

برای مدیریت فشار دکمه، روش onKeyDown() را پیاده‌سازی کنید.

برای مثال، این پیاده‌سازی به فشار دادن دکمه‌ها برای کنترل کنش‌ها در برنامه پاسخ می‌دهد:

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    return if (event?.repeatCount == 0) {
        when (keyCode) {
            KeyEvent.KEYCODE_STEM_1 -> {
                Log.d(TAG, "KEYCODE_STEM_1 pressed")
                true
            }
            KeyEvent.KEYCODE_STEM_2 -> {
                Log.d(TAG, "KEYCODE_STEM_2 pressed")
                true
            }
            else -> {
                super.onKeyDown(keyCode, event)
            }
        }
    } else {
        super.onKeyDown(keyCode, event)
    }
}

تعیین موقعیت دکمه‌ها

«کتابخانه AndroidX» دو روش برای توصیف مکان دکمه ارائه می‌دهد:

  • WearableButtons.getButtonLabel() رشته بومی‌سازی‌شده‌ای را برمی‌گرداند که جایگاه عمومی دکمه را در دستگاه توصیف می‌کند.
  • WearableButtons.getButtonIcon() نمادی را برمی‌گرداند که نشان‌دهنده مکان کلی دکمه در دستگاه است.

اگر این میاناهای برنامه‌سازی کاربردی با نیازهای برنامه شما مطابقت ندارد، می‌توانید از WearableButtons.getButtonInfo() API نیز برای دریافت مکان دکمه در صفحه و مدیریت آن به روشی سفارشی‌تر استفاده کنید. برای اطلاعات بیشتر درباره میاناهای برنامه‌سازی کاربردی، به مرجع Wear API مراجعه کنید.