DataItem 전송

cluelin·2021년 12월 21일
0

WearOS

목록 보기
3/3
        val request: PutDataRequest = putDataMapRequest.asPutDataRequest()
        request.setUrgent()

        Wearable.getDataClient(context).putDataItem(request);

위와같이 DataItem을 전송하면 연결된 모든 노드로 DataItem이 전송된다.
이경우 자기자신에게도 똑같이 전송이 되는데 One APK로 개발을 할때 문제가 될 여지가 있다.

WearableListenerService: WearableListenerService(){
    ...
    init {
        val nodeTask = Wearable.getNodeClient(applicationContext).localNode
        nodeTask.addOnCompleteListener { task ->
            task.result?.let {
                Log.d(LOG_TAG,"getNodeClient localNode : ${it.id}")
                localNodeId = it.id
            }
        }
    }
}

위와같이 자신의 nodeID를 확보한후

    override fun onDataChanged(dataEventBuffer : DataEventBuffer) {
        dataEventBuffer.forEach{dataEvent->
            val uri = dataEvent.dataItem.uri
            localNodeId?.let {
                if(uri.host == localNodeId){
                    Log.d(LOG_TAG, "skip loopback event")
                    return@forEach
                }
            }
        }
            

수신된 dataItem의 host와 비교해서 자신이 보낸 메세지일때는 스킵해준다.

0개의 댓글