1414 * limitations under the License.
1515 */
1616
17- package com.example.wear.snippets.com.example.wear.snippets. datalayer
17+ package com.example.wear.snippets.datalayer
1818
19+ import android.content.Context
20+ import android.graphics.Bitmap
21+ import android.graphics.BitmapFactory
1922import androidx.activity.ComponentActivity
23+ import com.example.wear.R
2024import com.google.android.gms.tasks.Task
25+ import com.google.android.gms.tasks.Tasks
26+ import com.google.android.gms.wearable.Asset
2127import com.google.android.gms.wearable.DataClient
2228import com.google.android.gms.wearable.DataEvent
2329import com.google.android.gms.wearable.DataEventBuffer
@@ -26,6 +32,8 @@ import com.google.android.gms.wearable.DataMapItem
2632import com.google.android.gms.wearable.PutDataMapRequest
2733import com.google.android.gms.wearable.PutDataRequest
2834import com.google.android.gms.wearable.Wearable
35+ import java.io.ByteArrayOutputStream
36+ import java.io.InputStream
2937
3038class DataLayerActivity : ComponentActivity (), DataClient.OnDataChangedListener {
3139 private val dataClient by lazy { Wearable .getDataClient(this ) }
@@ -80,3 +88,68 @@ class DataLayerActivity : ComponentActivity(), DataClient.OnDataChangedListener
8088 private const val COUNT_KEY = " com.example.key.count"
8189 }
8290}
91+
92+ // [START android_wear_sync_createasset]
93+ private fun createAssetFromBitmap (bitmap : Bitmap ): Asset =
94+ ByteArrayOutputStream ().let { byteStream ->
95+ bitmap.compress(Bitmap .CompressFormat .PNG , 100 , byteStream)
96+ Asset .createFromBytes(byteStream.toByteArray())
97+ }
98+ // [END android_wear_sync_createasset]
99+
100+ // [START android_wear_datalayer_imageputdata]
101+ private fun Context.sendImagePutDataRequest (): Task <DataItem > {
102+
103+ val asset: Asset = createAssetFromBitmap(BitmapFactory .decodeResource(resources, R .drawable.ic_walk))
104+ val request: PutDataRequest = PutDataRequest .create(" /image" ).apply {
105+ putAsset(" profileImage" , asset)
106+ }
107+ val putTask: Task <DataItem > = Wearable .getDataClient(this ).putDataItem(request)
108+
109+ return putTask
110+ }
111+ // [END android_wear_datalayer_imageputdata]
112+
113+ // [START android_wear_datalayer_imageputdatamap]
114+ private fun Context.sendImagePutDataMapRequest (): Task <DataItem > {
115+
116+ val asset: Asset = createAssetFromBitmap(BitmapFactory .decodeResource(resources, R .drawable.ic_walk))
117+ val request: PutDataRequest = PutDataMapRequest .create(" /image" ).run {
118+ dataMap.putAsset(" profileImage" , asset)
119+ asPutDataRequest()
120+ }
121+ val putTask: Task <DataItem > = Wearable .getDataClient(this ).putDataItem(request)
122+
123+ return putTask
124+ }
125+ // [END android_wear_datalayer_imageputdatamap]
126+
127+ class DataLayerActivity2 : ComponentActivity (), DataClient.OnDataChangedListener {
128+ // [START android_wear_datalayer_ondatachanged_assetextract]
129+ override fun onDataChanged (dataEvents : DataEventBuffer ) {
130+ dataEvents
131+ .filter { it.type == DataEvent .TYPE_CHANGED && it.dataItem.uri.path == " /image" }
132+ .forEach { event ->
133+ val bitmap: Bitmap ? = DataMapItem .fromDataItem(event.dataItem)
134+ .dataMap.getAsset(" profileImage" )
135+ ?.let { asset -> loadBitmapFromAsset(asset) }
136+ // Do something with the bitmap
137+ }
138+ }
139+
140+ fun loadBitmapFromAsset (asset : Asset ): Bitmap ? {
141+ // Convert asset into a file descriptor and block until it's ready
142+ val assetInputStream: InputStream ? =
143+ Tasks .await(Wearable .getDataClient(this ).getFdForAsset(asset))
144+ ?.inputStream
145+
146+ return assetInputStream?.let { inputStream ->
147+ // Decode the stream into a bitmap
148+ BitmapFactory .decodeStream(inputStream)
149+ } ? : run {
150+ // Requested an unknown asset
151+ null
152+ }
153+ }
154+ // [END android_wear_datalayer_ondatachanged_assetextract]
155+ }
0 commit comments