نقل الأصول على الساعه

الإعلانات

نقل الأصول على الساعه

 

لإرسال\ نقل نقاط كبيرة من البيانات الثنائية عبر البلوتوث، مثل الصور، يمكنك ربط أصل بعنصر البيانات ووضع عنصر البيانات في مخزن البيانات المكرره.

 

ملاحظة: على الرغم من أن تطبيق الساعه يمكنه الإتصال بتطبيق الهاتف بإستخدام واجهة برمجة التطبيقات لطبقة البيانات المشار إليها أدناه..

إلا أن الإتصال بشبكة بإستخدام واجهة برمجة التطبيقات هذه غير مستحسن.

 

تتعامل الأصول تلقائياً مع التخزين المؤقت للبيانات، لمنع إعادة الإرسال، وللحفاظ على النطاق الترددي للبلوتوث.

النمط الشائع، لتعامل التطبيق مع تحميل الصور، وتقليص حجمها لتكون ملائمة عند عرضها على الساعه، ونقلها إلى تطبيق الساعه كأحد الأصول. توضح الأمثلة التالية هذا النمط.

 

ملاحظة: على الرغم من أن حجم عناصر البيانات لا يتجاوز 100 كيلوبايت، إلا أن الأصول قد تكون كبيرة عن اللازم.

ومع ذلك، يؤثر نقل الأصول الكبيرة على تجربة المستخدم في العديد من الحالات، لذلك قم بإختبار تطبيقاتك للتأكد من أنها تحقق أداء جيد إذا قمت بنقل أصول كبيرة.

 

اقرأ المصادر التالية:

نموذج طبقة البيانات

 

 

 

 

نقل الأصول


قم بإنشاء الأصول بإستخدام إحدى دوال الإنشاء (التي تبدأ بكلمة إنشاء ()...create) في فئة الأصول.

هنا، قمنا بتحويل صورة نقطية إلى تدفق بايت، ثم قمنا بإستدعاء دالة ()createFromBytes لإنشاء الأصل.

KOTLIN

private fun createAssetFromBitmap(bitmap: Bitmap): Asset =
    ByteArrayOutputStream().let { byteStream ->
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream)
        Asset.createFromBytes(byteStream.toByteArray())
    }

JAVA 

private static Asset createAssetFromBitmap(Bitmap bitmap) {
    final ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
    return Asset.createFromBytes(byteStream.toByteArray());
}

 

 

عندما يكون لديك أصل، قم بربطه بعنصر بيانات بإستخدام الداله ()putAsset في DataMap أو PutDataRequest ثم قم بوضع عنصر البيانات في مخزن البيانات بإستخدام ()putDataItem :

 

إستخدام دالة PutDataRequest

KOTLIN

val asset: Asset = BitmapFactory.decodeResource(resources, R.drawable.image).let { bitmap ->
    createAssetFromBitmap(bitmap)
}
val request: PutDataRequest = PutDataRequest.create("/image").apply {
    putAsset("profileImage", asset)
}
val putTask: Task<DataItem> = Wearable.getDataClient(context).putDataItem(request)

JAVA

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Asset asset = createAssetFromBitmap(bitmap);
PutDataRequest request = PutDataRequest.create("/image");
request.putAsset("profileImage", asset);
Task<DataItem> putTask = Wearable.getDataClient(context).putDataItem(request);

 

 

إستخدام دالة PutDataMapRequest

KOTLIN

val asset: Asset = BitmapFactory.decodeResource(resources, R.drawable.image).let { bitmap ->
    createAssetFromBitmap(bitmap)
}
val request: PutDataRequest = PutDataMapRequest.create("/image").run {
    dataMap.putAsset("profileImage", asset)
    asPutDataRequest()
}
val putTask: Task<DataItem> = Wearable.getDataClient(context).putDataItem(request)

JAVA

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Asset asset = createAssetFromBitmap(bitmap);
PutDataMapRequest dataMap = PutDataMapRequest.create("/image");
dataMap.getDataMap().putAsset("profileImage", asset);
PutDataRequest request = dataMap.asPutDataRequest();
Task<DataItem> putTask = Wearable.getDataClient(context).putDataItem(request);

 

 

 

 

 

 

نقل الأصول على الساعه

 

تلقي الأصول


عندما يتم إنشاء أصل، قد ترغب في قراءته وإستخراجه على الجانب الآخر من الإتصال.

في ما يلي مثال على كيفية تنفيذ إستدعاء، للكشف عن تغيير أصل وإستخراج الأصل:

KOTLIN

override fun onDataChanged(dataEvents: DataEventBuffer) {
    dataEvents
            .filter { it.type == DataEvent.TYPE_CHANGED && it.dataItem.uri.path == "/image" }
            .forEach { event ->
                val bitmap: Bitmap? = DataMapItem.fromDataItem(event.dataItem)
                        .dataMap.getAsset("profileImage")
                        .let { asset -> loadBitmapFromAsset(asset) }
                // Do something with the bitmap
            }
}

fun loadBitmapFromAsset(asset: Asset): Bitmap? {
    // convert asset into a file descriptor and block until it's ready
    val assetInputStream: InputStream? =
            Tasks.await(Wearable.getDataClient(context).getFdForAsset(asset))
            ?.inputStream

    return assetInputStream?.let { inputStream ->
        // decode the stream into a bitmap
        BitmapFactory.decodeStream(inputStream)
    } ?: run {
        Log.w(TAG, "Requested an unknown Asset.")
        null
    }
}

JAVA

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
  for (DataEvent event : dataEvents) {
    if (event.getType() == DataEvent.TYPE_CHANGED &&
        event.getDataItem().getUri().getPath().equals("/image")) {
      DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
      Asset profileAsset = dataMapItem.getDataMap().getAsset("profileImage");
      Bitmap bitmap = loadBitmapFromAsset(profileAsset);
      // Do something with the bitmap
    }
  }
}

public Bitmap loadBitmapFromAsset(Asset asset) {
    if (asset == null) {
        throw new IllegalArgumentException("Asset must be non-null");
    }
    // convert asset into a file descriptor and block until it's ready
    InputStream assetInputStream =
        Tasks.await(Wearable.getDataClient(context).getFdForAsset(asset))
            .getInputStream();
    if (assetInputStream == null) {
        Log.w(TAG, "Requested an unknown Asset.");
        return null;
    }
    // decode the stream into a bitmap
    return BitmapFactory.decodeStream(assetInputStream);
}

 

راجع أيضاً:

 

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات