0

我有一个包含两个模块的应用程序,应用程序和可穿戴设备。

我需要将数据从手持设备发送到穿戴设备,从穿戴设备发送到手持设备。

这是我的代码:

佩戴 MainActivity

class MainActivity : Activity(), DataClient.OnDataChangedListener {

private lateinit var binding: ActivityMainBinding
private val dataClient by lazy { Wearable.getDataClient(this) }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

}

override fun onResume() {
    super.onResume()
    dataClient.addListener(this)
    addClickListener()
}

override fun onPause() {
    super.onPause()
    dataClient.removeListener(this)
}

override fun onDataChanged(dataEvent: DataEventBuffer) {
    Toast.makeText(this, "Hello World!", Toast.LENGTH_LONG).show()
}

private fun addClickListener() {
    binding.buttonWear.setOnClickListener {
        sendDataItem(System.currentTimeMillis())
    }
}

private fun sendDataItem(item: Long) {
    try {
        val request = PutDataMapRequest.create("/wearable_path").apply {
            dataMap.putString("wearable_key", item.toString())
        }
            .asPutDataRequest()
            .setUrgent()

        dataClient.putDataItem(request).addOnSuccessListener {
            android.util.Log.d(":::","Success")
        }.addOnCanceledListener {
            android.util.Log.d(":::","Cancel")
        }.addOnFailureListener {
            android.util.Log.d(":::","Failure")
        }

    } catch (cancellationException: CancellationException) {
        cancellationException.printStackTrace()
    } catch (exception: Exception) {
        exception.printStackTrace()
    }
}

}

手持MainFragment。

class MainFragment: Fragment(), DataClient.OnDataChangedListener {

private val dataClient by lazy { Wearable.getDataClient(requireContext()) }
private val button by lazy { requireActivity().findViewById<Button>(R.id.button)}

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_main, container, false)
}

override fun onResume() {
    super.onResume()
    dataClient.addListener(this)
    addClickListener()
}

override fun onPause() {
    super.onPause()
    dataClient.removeListener(this)
}

override fun onDataChanged(p0: DataEventBuffer) {
    Toast.makeText(requireContext(), "Hello World!", Toast.LENGTH_LONG).show()

}

private fun addClickListener() {
    button?.setOnClickListener {
        sendDataItem(System.currentTimeMillis())
    }
}

private fun sendDataItem(item: Long) {
    try {
        val request = PutDataMapRequest.create("/wearable_path").apply {
            dataMap.putString("wearable_key", item.toString())
        }.asPutDataRequest().setUrgent()

        dataClient.putDataItem(request).addOnSuccessListener {
            android.util.Log.d(":::","Success")
        }.addOnCanceledListener {
            android.util.Log.d(":::","Cancel")
        }.addOnFailureListener {
            android.util.Log.d(":::","Failure")
        }
    } catch (cancellationException: CancellationException) {
        cancellationException.printStackTrace()
    } catch (exception: Exception) {
        exception.printStackTrace()
    }
}
}

问题是,当我单击手持设备中的按钮时,两个设备都接收到数据并显示 toast,但是当我单击可穿戴设备中的按钮时,handlerd (fragment) 中的 onDataChanged 没有被调用,并且显示了 toast在可穿戴设备中,但不在手持设备中。

有什么建议吗?

4

2 回答 2

0

我找到了解决方案。我正在签署应用程序,但没有唱磨损模块。

我必须以相同的方式登录应用程序和穿戴模块。

小心 applicationId,它也必须相同。

于 2022-03-01T06:17:17.360 回答
-1

我也遇到了android代码的问题,然后等待帮助但没有用,我不得不花钱请专业人士。

于 2022-02-28T08:45:40.067 回答