خواه یک تصویر خنده دار، یک ویدیوی آموزنده یا یک کلیپ صوتی جذاب باشد، این امکان را به کاربران می دهد که محتوا را به اشتراک بگذارند، تجربه آنها را غنی می کند و تعامل را افزایش می دهد. این سند به بررسی ملزومات اشتراکگذاری رسانه در اندروید، از جمله APIها و تکنیکهایی که برای ادغام این قابلیت نیاز دارید، میپردازد.
برای اشتراک گذاری طراحی شده است
طراحی Android قابلیت همکاری بین برنامهها را با استفاده از سیستم مبتنی بر Intent ارتقا میدهد. Intent یک توصیف انتزاعی از عملیاتی است که باید انجام شود. Intent به برنامهها اجازه میدهد بدون نیاز به دانستن جزئیات درباره یکدیگر با یکدیگر ارتباط برقرار کنند.
وقتی برنامه ای می خواهد داده ها را به اشتراک بگذارد یا اقدامی را آغاز کند، یک Intent ایجاد می کند که نوع محتوا و عملیات را مشخص می کند. سیستم اندروید لیستی از برنامههای مرتبط را ارائه میکند که میتوانند آن 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 انجام دهید عبارتند از:
- ببینید کاربران شما چه زمانی اشتراک گذاری را تکمیل می کنند و به کجا می رسند
- ارائه پیشنمایش محتوای متنی غنی، از Android 10 (سطح API 29)
برای اطلاعات بیشتر درباره اشتراکگذاریهای Android و نحوه استفاده از آنها ، به ارسال دادههای ساده به برنامههای دیگر مراجعه کنید.
اهداف اشتراکگذاری مستقیم را ارائه کنید تا کاربران سایر برنامهها بتوانند آدرسهای اینترنتی، تصاویر یا انواع دیگر دادهها را با برنامه شما به اشتراک بگذارند. Direct Share با ارائه مخاطبین از برنامههای پیامرسان و اجتماعی بهطور مستقیم در اشتراکگذاری Android، بدون اینکه کاربران مجبور باشند برنامه را انتخاب کنند و سپس مخاطب را جستجو کنند، کار میکند.
از دریافت محتوای غنی از طریق OnReceiveContentListener
پشتیبانی کنید. این API مکان واحدی را برای کد شما فراهم می کند تا بتواند تمام محتوا را دریافت کند، از متن ساده و سبک گرفته تا نشانه گذاری، تصاویر، فیلم ها، فایل های صوتی و موارد دیگر. محتوا می تواند از صفحه کلیدهای تصویر، کشیدن و رها کردن، یا کلیپ بورد باشد.
فایل های رسانه ای را به اشتراک بگذارید
Intent ها فقط می توانند حاوی مقدار کمی داده باشند، بنابراین Android راهی برای Intent فراهم می کند تا یک دسته امن برای فایل ها داشته باشد. به اشتراک گذاری فایل های رسانه ای به طور ایمن از برنامه شامل موارد زیر است:
- برنامه خود را به گونه ای پیکربندی کنید که یک دسته امن به فایل - به شکل URI محتوا - با استفاده از مؤلفه Android
FileProvider
ارائه دهد. - دایرکتوری های قابل اشتراک گذاری را در مانیفست خود مشخص کنید .
- از
getUriForFile
برای ایجاد URL محتوا استفاده کنید که به عنوان یک دسته امن برای فایل عمل می کند. - یک Intent ایجاد کنید که به فایل مجوز می دهد .
برای اطلاعات بیشتر در مورد نحوه اشتراک گذاری ایمن فایل ها، به درباره اشتراک گذاری فایل ها مراجعه کنید.
بهینه سازی رسانه برای اشتراک گذاری
چه در حال اشتراک گذاری رسانه با سایر کاربران در برنامه خود باشید، چه رسانه ها را با برنامه دیگری به اشتراک بگذارید، می خواهید مطمئن شوید که رسانه ای را به اشتراک می گذارید که تجربه اشتراک گذاری با کیفیت بالایی را ارائه می دهد.
ایجاد تعادل بین کیفیت و اندازه
فایلهای رسانهای بزرگ میتوانند به سرعت پهنای باند و فضای ذخیرهسازی را مصرف کنند، که منجر به تاخیرهای خستهکننده و هزینههای بالقوه بیش از حد داده برای کاربران شما میشود. فشرده سازی بهترین دوست شما در اینجا است.
- فشردهسازی تصویر : از فرمتهای فشردهسازی تصویر مدرن مانند 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()