Uygulamanızın yansıtılan etkinliğine gönderilen kullanıcı girişini yakalamak ve işlemek ya da özel dokunmatik alan davranışları uygulamak için dolaylı işaretçi girişlerini kullanın. Diğer etkinlik türlerini (ör. kamera işlemi) işlemek için bu kılavuzdaki aşağıdaki bölümlere bakın.
Kamera hareketini yönetme
Bir kullanıcı cihazın kamera düğmesine her bastığında sistem, giriş etkinliğini uygulamanızın yansıtılan etkinliğine ProjectedInputEvent.ProjectedInputAction.TOGGLE_APP_CAMERA işlemi olarak iletir. Uygulamanız, özel bir dağıtıcı kullanarak bu işlemi gözlemleyebilir:
@OptIn(ExperimentalProjectedApi::class) class CameraActionInputSnippetActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Observe hardware camera action events when RESUMED lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.RESUMED) { withContext(Dispatchers.Default) { try { val projectedActivity = ProjectedActivityCompat.create(this@CameraActionInputSnippetActivity) try { projectedActivity.projectedInputEvents.collect { inputEvent -> if (inputEvent.inputAction == TOGGLE_APP_CAMERA) { withContext(Dispatchers.Main) { onCameraActionTriggered() } } } } finally { projectedActivity.close() } } catch (e: CancellationException) { throw e } catch (e: Exception) { Log.w("CameraActionSnippet", "ProjectedActivityCompat unavailable: ${e.message}") } } } } setContent { GlimmerTheme { TouchpadInputSnippet( onTap = { Log.i("CameraActionSnippet", "Touchpad tapped") } ) } } } private fun onCameraActionTriggered() { Log.i("CameraActionSnippet", "Camera action button double-pressed!") } }
Genel hareket etkinliklerini inceleme
Uygulamanızın tahmini etkinliğine gönderilen genel hareket etkinliklerini incelemek için dispatchGenericMotionEvent kullanın. Genel hareket etkinlikleri, etkinlik sınırında yayınlanır ve odaklanılmış bir Jetpack Compose Glimmer bileşeni gerektirmez.
MotionEvent şunları içerebilir:
- Maskelenmiş bir işlem (ör.
ACTION_DOWN,ACTION_MOVEveyaACTION_UP). AXIS_X,AXIS_YveyaAXIS_Zgibi işaretçi koordinatları.- Cihaz kimliği ve kaynak gibi cihaz ve kaynak bilgileri.
Her değer, her işlem için anlamlı değildir. Ham bir etkinliği tamamlanmış bir hareket olarak değerlendirmeden önce işlemi ve kaynağı inceleyin.
class MotionGestureInputSnippetActivity : ComponentActivity() { override fun dispatchGenericMotionEvent(ev: MotionEvent): Boolean { val actionName = when (ev.actionMasked) { MotionEvent.ACTION_DOWN -> "ACTION_DOWN" // First contact with the glasses touchpad MotionEvent.ACTION_MOVE -> "ACTION_MOVE" // Contact moving across the glasses touchpad MotionEvent.ACTION_UP -> "ACTION_UP" // Contact lifted from the glasses touchpad else -> "ACTION_${ev.actionMasked}" } Log.d( "MotionGestureSnippet", "MotionEvent: action=$actionName x=${ev.x} y=${ev.y}" ) // Delegate to super unless intentionally consuming the event return super.dispatchGenericMotionEvent(ev) } }
Yalnızca etkinlik, etkinliği kasıtlı olarak kullandığında true döndürülür.
Aksi takdirde, etkinliğin normal dağıtım yoluyla devam edebilmesi için super.dispatchGenericMotionEvent(ev) değerini döndürün.
Sistem geri gitme hareketini işleme
Bir ekranın özel geri davranışına ihtiyacı olduğunda uygulamanız, gözlükle geri hareketini diğer etkinlikler için kullandığınız Android API'lerini (ör. OnBackPressedDispatcher ve OnBackPressedCallback) kullanarak işlemelidir.
Kullanıcı hareketi, gözlüğün türüne bağlıdır:
- Gözlük ekranında, dokunmatik alanda aşağı kaydırma işlemi sistemin geri hareketini gerçekleştirir.
- Ses gözlüklerinde, dokunmatik alanda geri kaydırma işlemiyle sistemde geri gitme hareketi yapılır.
Mevcut ekranın geri tuşunu yakalaması gerektiğinde (ör. bir yer paylaşımını kapatma veya çıkış onayını gösterme) geri dönüşü kaydetme.
class BackGestureInputSnippetActivity : ComponentActivity() { private val backCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { onBackGestureReceived() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Register back gesture callback with Activity's onBackPressedDispatcher onBackPressedDispatcher.addCallback(this, backCallback) } private fun onBackGestureReceived() { Log.i("BackGestureSnippet", "System back gesture intercepted") } }
Geri arama yalnızca etkin ekranın Geri'yi engellemesi gerektiğinde etkinleştirilmelidir. Varsayılan sistem veya gezinme davranışı Geri düğmesini yönetmesi gerektiğinde geri çağırmayı devre dışı bırakın veya kaldırın.
Sonraki adımlar
Bu etkinlikler için giriş işlemeyi uyguladıktan sonra, aşağıdaki konularda diğer giriş etkinliklerini işleme hakkında daha fazla bilgi edinebilirsiniz:
- Kullanıcı arayüzü girişi hakkında daha fazla bilgi için Focus in Jetpack Compose Glimmer ve Handle indirect pointer inputs başlıklı makaleleri inceleyin.
- Tahmini giriş etkinlikleri için
ProjectedActivityCompat,ProjectedInputEventveProjectedInputEvent.ProjectedInputActionbölümlerini inceleyin. - Platform girişi ve gezinme için
MotionEventve Özel geri gezinme sağlama başlıklı makaleleri inceleyin.