لمحة عن مشاركة الوسائط

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

ميزة تتيح المشاركة

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

عندما يريد أحد التطبيقات مشاركة البيانات أو بدء إجراء ما، فإنه ينشئ هدفًا نوع المحتوى والعملية. يعرض نظام Android قائمة من التطبيقات ذات الصلة التي يمكنها التعامل مع هذا الهدف، ما يتيح للمستخدم اختيار التطبيق لاستخدامها. وهذا النهج يعزز المنظومة المتكاملة التعاونية.

تتضمن مشاركة النص بضعة أسطر من الرموز:

val sendIntent: Intent = Intent().apply {
    action = Intent.ACTION_SEND
    putExtra(Intent.EXTRA_TEXT, "This is my text to share.")
    type = "text/plain"
}

val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)

يعرض سطر createChooser واجهة المستخدم قائمة مشاركة البيانات من Android، والتي تتيح للمستخدمين مشاركة المعلومات مع المستخدمين، بما في ذلك اقتراحات التطبيقات ذات الصلة، بنقرة واحدة تشمل الأشياء الأخرى التي يمكنك القيام بها باستخدام Android Sharesheet ما يلي:

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

توفير استهدافات ميزة "المشاركة المباشرة" لتسهيل مشاركة عناوين URL أو الصور أو أنواع أخرى من البيانات مع تطبيقك من خلال تطبيقات أخرى بشكل أسرع وأسهل. تعمل ميزة المشاركة المباشرة من خلال عرض جهات الاتصال من تطبيقات المراسلة والتطبيقات الاجتماعية مباشرةً في "لوحة المشاركة" في Android، بدون أن يحتاج المستخدمون إلى اختيار التطبيق ثم البحث عن جهة الاتصال.

دعم تلقّي محتوى وافٍ من خلال OnReceiveContentListener توفر واجهة برمجة التطبيقات هذه مكانًا واحدًا الرموز البرمجية اللازمة لمعالجة تلقي كل المحتوى، بدءًا من النص العادي والنمط ووصولاً إلى الترميز والصور والفيديوهات والملفات الصوتية وغيرها. يمكن أن يأتي المحتوى من الصورة لوحات المفاتيح أو عمليات السحب والإفلات أو الحافظة

مشاركة ملفات الوسائط

يمكن أن تحتوي الأهداف على قدر صغير فقط من البيانات، لذلك يوفر Android وسيلة يهدف إلى تضمين مؤشر آمن للملفات. تتم مشاركة ملفات الوسائط بأمان من يتضمن تطبيقك ما يلي:

اطّلِع على لمحة عن مشاركة الملفات للحصول على مزيد من المعلومات حول كيفية مشاركة الملفات بأمان.

تحسين الوسائط لمشاركتها

سواء كنت تشارك الوسائط مع مستخدمين آخرين في تطبيقك أو تشاركها مع تطبيق آخر، عليك التأكّد من مشاركة الوسائط التي توفّر تجربة مشاركة عالية الجودة.

تحقيق التوازن بين الجودة والحجم

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

  • ضغط الصور: استخدِم تنسيقات ضغط الصور الحديثة، مثل وهما تنسيقان WebP وAVIF، وهما يوفّران نِسب ضغط أعلى مقارنةً بالخيارات التقليدية صور JPEG بدون فقدان جودة بشكل كبير. الاختبار بجودة مختلفة الإعدادات للعثور على الموضع الأفضل.
  • ضغط الفيديو: استفِد من إمكانات الفيديو AV1 أو H.265 (HEVC). الضغط لتقديم كفاءة ضغط أفضل مع الحفاظ على جودة بصرية ممتازة. يمكنك التحقق من وجود ترميز الأجهزة على أجهزة Android 10 والإصدارات الأحدث، بالإضافة إلى mediaPerformanceClass للمساعدة لتحديد أفضل ما يمكن لجهازك دعمه. ننصحك بتقديم تجارب حلول لتناسب مختلف الإعدادات المفضّلة لدى المستخدمين والشبكات الظروف.
fun hasHardwareEncodingSupportFor(mimeType: String): Boolean {
    val codecList = MediaCodecList(REGULAR_CODECS)
    val codecInfos = codecList.codecInfos
    for ( codecInfo in codecInfos ) {
        if (!codecInfo.isEncoder()) {
            continue;
        }
        if (!codecInfo.isHardwareAccelerated()) {
            continue;
        }
        val types: Array<String> = codecInfo.getSupportedTypes()
        for (j in types.indices) {
            if (types[j].equals(mimeType, ignoreCase = true)) {
                return true
            }
        }
    }
    return false
}
// test for AV1 hardware encoding support
val hasAV1 = hasHardwareEncodingSupportFor("video/av01")

تكييف الوسائط

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

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

تعزيز قابلية اكتشاف الوسائط

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

إضافة بيانات وصفية إلى الصور

تكتب فئة Jetpack ExifInterface البيانات الوصفية بتنسيق JPEG وPNG وWebP. الصور في شكل علامات Exif.

// sets the title of the image in the form of Exif data
val exif = ExifInterface(imageFile)
exif.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, "Beautiful sunset")
exif.saveAttributes()