এটি একটি মজার ছবি, একটি তথ্যপূর্ণ ভিডিও, বা একটি চিত্তাকর্ষক অডিও ক্লিপ হোক না কেন, ব্যবহারকারীদের বিষয়বস্তু শেয়ার করতে সক্ষম করে তাদের অভিজ্ঞতাকে সমৃদ্ধ করে এবং ব্যস্ততার প্রচার করে৷ এই দস্তাবেজটি অ্যান্ড্রয়েডে মিডিয়া শেয়ার করার প্রয়োজনীয়তাগুলি অন্বেষণ করে, যার মধ্যে এপিআই এবং কৌশলগুলি আপনার এই ক্ষমতাকে সংহত করার জন্য প্রয়োজন।
ভাগ করার জন্য ডিজাইন করা হয়েছে
অ্যান্ড্রয়েডের ডিজাইন ইন্টেন্টের উপর ভিত্তি করে একটি সিস্টেম ব্যবহার করে অ্যাপগুলির মধ্যে আন্তঃকার্যযোগ্যতা প্রচার করে। একটি অভিপ্রায় হল একটি অপারেশনের একটি বিমূর্ত বিবরণ যা সঞ্চালিত হবে। ইন্টেন্টস অ্যাপগুলিকে একে অপরের সম্পর্কে সুনির্দিষ্ট না জেনে একে অপরের সাথে যোগাযোগ করার অনুমতি দেয়।
যখন একটি অ্যাপ ডেটা শেয়ার করতে চায় বা একটি ক্রিয়া শুরু করতে চায়, তখন এটি একটি ইন্টেন্ট তৈরি করে যা বিষয়বস্তু এবং অপারেশনের ধরন নির্দিষ্ট করে। অ্যান্ড্রয়েড সিস্টেম প্রাসঙ্গিক অ্যাপগুলির একটি তালিকা উপস্থাপন করে যা সেই অভিপ্রায়কে পরিচালনা করতে পারে, ব্যবহারকারীকে কোন অ্যাপটি ব্যবহার করতে হবে তা চয়ন করতে দেয়। এই পদ্ধতিটি একটি সহযোগী বাস্তুতন্ত্রকে উত্সাহিত করে।
পাঠ্য ভাগ করে নেওয়ার জন্য কোডের কয়েকটি লাইন জড়িত:
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 Sharesheet UI প্রদর্শন করে, যা ব্যবহারকারীদের তথ্য শেয়ার করতে দেয় — প্রাসঙ্গিক অ্যাপের পরামর্শ সহ — একক ট্যাপ করে। অ্যান্ড্রয়েড শেয়ারশীট দিয়ে আপনি যা করতে পারেন তার মধ্যে রয়েছে:
- আপনার ব্যবহারকারীরা কখন একটি শেয়ার সম্পূর্ণ করেন এবং কোথায় তা খুঁজে বের করুন
- Android 10 (API স্তর 29) থেকে শুরু করে সমৃদ্ধ পাঠ্য সামগ্রীর পূর্বরূপ প্রদান করুন
অ্যান্ড্রয়েড শেয়ারশীট এবং কীভাবে সেগুলি ব্যবহার করবেন সে সম্পর্কে আরও তথ্যের জন্য অন্যান্য অ্যাপগুলিতে সাধারণ ডেটা পাঠান দেখুন৷
অন্য অ্যাপের ব্যবহারকারীদের জন্য আপনার অ্যাপের সাথে ইউআরএল, ছবি বা অন্যান্য ধরনের ডেটা শেয়ার করা সহজ এবং দ্রুত করার জন্য সরাসরি শেয়ারের লক্ষ্যগুলি প্রদান করুন । ডাইরেক্ট শেয়ার কাজ করে মেসেজিং এবং সোশ্যাল অ্যাপ থেকে পরিচিতিগুলি সরাসরি অ্যান্ড্রয়েড শেয়ারশিটে উপস্থাপন করে, ব্যবহারকারীদের অ্যাপটি নির্বাচন না করে এবং তারপরে পরিচিতি অনুসন্ধান করতে হবে।
একটি OnReceiveContentListener
এর মাধ্যমে সমৃদ্ধ বিষয়বস্তু প্রাপ্তিতে সহায়তা করুন। প্লেইন এবং স্টাইল করা টেক্সট থেকে শুরু করে মার্কআপ, ছবি, ভিডিও, অডিও ফাইল এবং অন্যান্য সমস্ত বিষয়বস্তু গ্রহণ করার জন্য এই API আপনার কোডের জন্য একটি একক স্থান প্রদান করে। বিষয়বস্তু ইমেজ কীবোর্ড, ড্র্যাগ অ্যান্ড ড্রপ বা ক্লিপবোর্ড থেকে আসতে পারে।
মিডিয়া ফাইল শেয়ার করুন
ইন্টেন্টে শুধুমাত্র অল্প পরিমাণ ডেটা থাকতে পারে, তাই Android ফাইলগুলির একটি নিরাপদ হ্যান্ডেল ধারণ করার জন্য ইন্টেন্টের জন্য একটি উপায় প্রদান করে। আপনার অ্যাপ থেকে নিরাপদে মিডিয়া ফাইল শেয়ার করা জড়িত:
- Android
FileProvider
কম্পোনেন্ট ব্যবহার করে — একটি কন্টেন্ট URI আকারে — ফাইলে একটি সুরক্ষিত হ্যান্ডেল অফার করতে আপনার অ্যাপ কনফিগার করুন । - আপনার ম্যানিফেস্টে শেয়ারযোগ্য ডিরেক্টরি উল্লেখ করুন ।
- একটি কন্টেন্ট URL তৈরি করতে
getUriForFile
ব্যবহার করুন যা ফাইলের নিরাপদ হ্যান্ডেল হিসেবে কাজ করে। - একটি অভিপ্রায় তৈরি করুন যা ফাইলের অনুমতি দেয় ।
কিভাবে নিরাপদে ফাইল শেয়ার করতে হয় সে সম্পর্কে আরও তথ্যের জন্য ফাইল শেয়ারিং সম্পর্কে দেখুন।
শেয়ার করার জন্য মিডিয়া অপ্টিমাইজ করুন
আপনি আপনার অ্যাপে অন্য ব্যবহারকারীদের সাথে মিডিয়া শেয়ার করছেন বা অন্য অ্যাপে মিডিয়া শেয়ার করছেন, আপনি নিশ্চিত করতে চান যে আপনি এমন মিডিয়া শেয়ার করছেন যা একটি উচ্চ মানের শেয়ারিং অভিজ্ঞতা প্রদান করে।
গুণমান এবং আকারের মধ্যে ভারসাম্য বজায় রাখা
বড় মিডিয়া ফাইলগুলি দ্রুত ব্যান্ডউইথ এবং স্টোরেজ গ্রাস করতে পারে, যার ফলে আপনার ব্যবহারকারীদের জন্য হতাশাজনক বিলম্ব এবং সম্ভাব্য ডেটা অতিরিক্ত চার্জ হতে পারে। কম্প্রেশন এখানে আপনার সেরা বন্ধু.
- ইমেজ কম্প্রেশন : 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()