Я студент и сейчас создаю приложение для Android с Kotlin в качестве языка программирования.Цель приложения будет регистрировать нажатия клавиш от пользователей, которые я буду использовать для биометрических исследований.Я не обладаю достаточными знаниями в Kotlin или Android Studio, так как я впервые работаю в Android Studio.
В приложении много действий, и я делюсь кодом из одного из действий, где мне нужно распознатьнажатия клавиш в Editexts, в то время как пользователь нажимает клавиши на программной клавиатуре для ввода имени пользователя и пароля.
Я нашел несколько примеров для разработчиков Android о KeyEvents и некоторых References .
Данные, которые мне нужны от нажатия клавиш, следующие:
a. the key pressed.
b. key pressed time.
c. key released time.
d. its ASCII value.
Код XML выглядит следующим образом:
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/rounded_button"
android:fontFamily="@font/pt_mono"
android:onClick="resetval"
android:text="@string/reset"
android:textAlignment="center"
android:textColor="@android:color/background_light"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/button4"
app:layout_constraintStart_toStartOf="@+id/button4"
app:layout_constraintTop_toBottomOf="@+id/button4"
app:layout_constraintVertical_bias="0.007" />
<Button
android:id="@+id/button4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/rounded_button"
android:fontFamily="@font/pt_mono"
android:onClick="input"
android:text="@string/inp"
android:textAlignment="center"
android:textColor="@android:color/background_light"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="@+id/editText9"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/editText9"
app:layout_constraintTop_toBottomOf="@+id/editText9" />
<EditText
android:id="@+id/editText8"
android:imeOptions="normal"
android:layout_width="320dp"
android:layout_height="28dp"
android:layout_marginTop="72dp"
android:autofillHints=""
android:background="@drawable/rounded_text"
android:ems="10"
android:fontFamily="@font/pt_mono"
android:hint="@string/usrname"
android:inputType="textEmailAddress"
android:paddingLeft="10dp"
android:textAlignment="textStart"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/textView21"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="@+id/textView21"
app:layout_constraintTop_toBottomOf="@+id/textView21" />
<EditText
android:id="@+id/editText9"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_marginTop="8dp"
android:autofillHints=""
android:background="@drawable/rounded_text"
android:paddingLeft="10dp"
android:ems="10"
android:fontFamily="@font/pt_mono"
android:hint="@string/pass"
android:inputType="textPassword"
android:textAlignment="textStart"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/editText8"
app:layout_constraintStart_toStartOf="@+id/editText8"
app:layout_constraintTop_toBottomOf="@+id/editText8" />
<TextView
android:id="@+id/textView21"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="52dp"
android:fontFamily="@font/pt_mono"
android:text="@string/train_tem"
android:textAlignment="center"
android:textColor="@color/btext"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Код Котлина выглядит следующим образом:
class trainingT : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.title = "Training Template"
setContentView(R.layout.activity_training_t)
//getuserkeystroke()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
return when (keyCode) {
KeyEvent.KEYCODE_D -> {
getuserkeystroke(keyCode)
true
}
else -> super.onKeyDown(keyCode, event)
}
}
private fun getuserkeystroke(keyCode: Int){
Log.d("D should be displayed", "Is it displayed?")//keyCode.toString())
val toast = Toast.makeText(getApplicationContext(), "D is Pressed", Toast.LENGTH_LONG)
val layout = toast.getView() as LinearLayout
if (layout.childCount > 0) {
val tv = layout.getChildAt(0) as TextView
tv.gravity = Gravity.CENTER_VERTICAL or Gravity.CENTER_HORIZONTAL
}
toast.show()
}}
Пока я застрял на точке с номером "а".Мне не хватает того, что я знаю, поскольку нажатая клавиша должна быть распознана внутри пространства Editext, но я понятия не имею, как это сделать.Код Kotlin должен вызывать функцию getuserkeystroke () сразу после нажатия клавиши «d» (я думал о распознавании хотя бы одной клавиши и после этого случайных клавиш), отображать сообщение отладки в журнале и отображать тост, ноэто не работает.
Подскажите, пожалуйста, как мне поступить, чтобы распознавать клавиши, нажимаемые на программной клавиатуре Android при наборе в реальном времени?А также некоторые предложения о том, как получить данные, которые я упомянул в пунктах "b", "c" и "d".
Снимок экрана действий выглядит следующим образом: Снимок экрана