我有一个包含两个模块的应用程序,应用程序和可穿戴设备。
我需要将数据从手持设备发送到穿戴设备,从穿戴设备发送到手持设备。
这是我的代码:
佩戴 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在可穿戴设备中,但不在手持设备中。
有什么建议吗?