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

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

مصمّمة للمشاركة

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

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

تتطلّب مشاركة النص بضعة أسطر من الرموز البرمجية فقط:

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()