মিডিয়াপ্রোভাইডার মডিউল

মিডিয়াপ্রোভাইডার মডিউলটি ইনডেক্সড মেটাডেটা (এসডি কার্ড এবং ইউএসবি ডিভাইস থেকে অডিও, ভিডিও এবং ছবি) অপ্টিমাইজ করে এবং মিডিয়াস্টোর পাবলিক এপিআই-এর মাধ্যমে অ্যাপগুলিতে সেই ডেটা উপলব্ধ করে। ব্যবহারকারীর গোপনীয়তা বজায় রাখার জন্য, মিডিয়াপ্রোভাইডার মডিউলটি অ্যান্ড্রয়েড ১০-এ প্রবর্তিত স্কোপড স্টোরেজ সিকিউরিটি মডেলটি প্রয়োগ করে, যার মধ্যে সংবেদনশীল অবস্থান মেটাডেটা সম্পাদনা করা অন্তর্ভুক্ত। এই মডিউলটি আপডেটযোগ্য, যা অ্যান্ড্রয়েডকে সুরক্ষা সমস্যাগুলিতে দ্রুত প্রতিক্রিয়া জানাতে (সংবেদনশীল ব্যবহারকারীর ডেটা সুরক্ষিত রাখতে) এবং দ্রুত নতুন মিডিয়া ফর্ম্যাট যুক্ত করতে সক্ষম করে (ব্যবহারকারী এবং বিকাশকারী উভয়কেই ধারাবাহিকতা প্রদান করে)।

অ্যান্ড্রয়েড ১০-এ পরিবর্তন

অ্যান্ড্রয়েড ১০ মিডিয়া ফাইল থেকে ডেটা সনাক্তকরণ এবং নিষ্কাশন সম্পর্কিত বেশ কয়েকটি উন্নতি প্রবর্তন করেছে, বিশেষ করে:

  • ফাইলের MIME টাইপের প্রথম অংশ ব্যবহার করে ফাইলের কন্টেন্ট টাইপ নির্ধারণ করা। উদাহরণস্বরূপ, OS জানে যে image/png এবং image/x-newly-invented-format উভয়ই ছবি, এবং এইভাবে শেষ ব্যবহারকারীর কাছে প্রাসঙ্গিক অনুমতিগুলি সঠিকভাবে বর্ণনা করতে পারে।

  • শুধুমাত্র ফাইল এক্সটেনশন ব্যবহার করে (এবং নিরাপত্তা সমস্যা এড়াতে কন্টেন্ট স্নিফিং ব্যবহার না করে) MIME টাইপ নির্ধারণ করা।

  • আপস্ট্রিম ডেবিয়ান লিনাক্স এবং অ্যান্ড্রয়েড ম্যাপিংয়ের সংমিশ্রণ ব্যবহার করে একটি নির্বিচারে ফাইলের MIME প্রকার নির্ধারণ করা।

  • video/* এবং audio/* ফাইল ( MediaMetadataRetriever এর মাধ্যমে) এবং image/* ফাইল ( ExifInterface এর মাধ্যমে) থেকে প্রাসঙ্গিক ডেটা ফেরত পাঠানো হচ্ছে।

অ্যান্ড্রয়েড ১১-এ পরিবর্তনগুলি

অ্যান্ড্রয়েড ১১-এ, মিডিয়াপ্রোভাইডার মডিউলটি নিম্নলিখিত উন্নতিগুলির সাথে অ্যান্ড্রয়েড ১০-এ করা পরিবর্তনগুলির উপর ভিত্তি করে তৈরি:

  • ইন্ডেক্সিং-এর উন্নতি। মিডিয়াপ্রোভাইডার মডিউল এখন মিডিয়াস্টোর পাবলিক এপিআই-এর সাথে উপলব্ধ মেটাডেটা সমন্বয় করে মেটাডেটা সূচী করে। পরিবর্তনগুলির মধ্যে রয়েছে:

    • গ্যালারি-স্টাইলের অ্যাপগুলিকে এই কলামের উপর ভিত্তি করে দ্রুত মিডিয়া ফিল্টার করতে সক্ষম করার জন্য নতুন is_favorite কলাম এবং QUERY_ARG_MATCH_FAVORITE আর্গুমেন্ট।

    • রঙের স্থানের মেটাডেটা সূচীকরণ।

    • এই কলামের উপর ভিত্তি করে গ্যালারি-স্টাইলের অ্যাপগুলিকে ফিল্টার করতে সক্ষম করার জন্য নতুন is_trashed কলাম এবং QUERY_ARG_MATCH_TRASHED আর্গুমেন্ট।

    • নতুন API যা একক ব্যবহারকারীর ডায়ালগ প্রম্পট ব্যবহার করে একাধিক আইটেমের বাল্ক-পরিবর্তন সক্ষম করে, যার মধ্যে রয়েছে createDeleteRequest() , createFavoriteRequest() , createTrashRequest() , এবং createWriteRequest()

    • পূর্ববর্তী সিঙ্ক্রোনাইজেশন পয়েন্ট থেকে ঘটে যাওয়া পরিবর্তনগুলি দ্রুত এবং নির্ভরযোগ্যভাবে সনাক্ত করার জন্য নতুন GENERATION_ADDED এবং GENERATION_MODIFIED কলাম।

    • উপরে উল্লেখিত নয় এমন অতিরিক্ত মেটাডেটা কলামগুলির সাথে ব্যবহারের জন্য নতুন GROUP BY পাবলিক API।

  • PNG এবং WebP কন্টেইনার থেকে মেটাডেটা বের করার জন্য ExifInterface এর উন্নতি।

  • স্ক্রিন ক্যাপচারে DateTimeOriginal মেটাডেটা লেখার জন্য SystemUI তে উন্নতি।

এছাড়াও, আপনি এখন নতুন মিডিয়া ফর্ম্যাট যোগ করে, কোন স্টোরেজ ডিভাইসগুলিকে সূচীবদ্ধ করা উচিত তা চিহ্নিত করে এবং এমনকি MTP স্ট্যাক প্রতিস্থাপন করে MediaProvider কাস্টমাইজ করতে পারেন। বিস্তারিত জানার জন্য, কাস্টমাইজেশন দেখুন।

মডিউল সীমানা

অ্যান্ড্রয়েড ১১ packages/providers/MediaProvider সমস্ত কোড একটি নতুন স্থানে স্থানান্তর করে, MTP-সম্পর্কিত লজিকের উল্লেখযোগ্য ব্যতিক্রম ছাড়া। এছাড়াও, frameworks/base/core/java/android/provider/MediaStore.java এখন packages/providers/MediaProvider মডিউল সীমানার মধ্যে রয়েছে।

প্যাকেজ ফর্ম্যাট

মিডিয়াপ্রোভাইডার মডিউলটি APK-ইন-APEX ফর্ম্যাটে।

নির্ভরতা

মিডিয়াপ্রোভাইডার নির্ভরতা কাস্টমাইজেশনের সাথে সম্পর্কিত (অর্থাৎ, যদি আপনি মিডিয়াপ্রোভাইডার কাস্টমাইজ করেন, তাহলে আপনাকে নিশ্চিত করতে হবে যে আপনার বাস্তবায়ন আপনার কাস্টমাইজেশনের সাথে সম্পর্কিত নির্ভরতা পূরণ করে)।

  • কাস্টম বা নন-স্ট্যান্ডার্ড মিডিয়া ফাইল ফর্ম্যাট ব্যবহার করার সময় (উদাহরণস্বরূপ, কোনও বিক্রেতা-নির্দিষ্ট ক্যামেরা অ্যাপ দ্বারা তৈরি একটি ফর্ম্যাট), মিডিয়াপ্রোভাইডার দ্বারা ইনডেক্সিং সক্ষম করতে আপনাকে অবশ্যই প্রতিটি কাস্টম ফর্ম্যাট MimeUtils এবং মিডিয়া এক্সট্র্যাক্টর মডিউলের সাথে নিবন্ধন করতে হবে।

  • StorageManagerService বাস্তবায়নে ব্যবহৃত স্টোরেজ ডিভাইসের একটি কাস্টম সেট (যেমন SD কার্ড স্লট এবং USB পোর্ট) MediaProvider যাতে সূচী করে তা নিশ্চিত করতে, VolumeInfo.MOUNT_FLAG_INDEXABLE ফ্ল্যাগ সেট করুন।

  • একটি কাস্টম (অ-AOSP) MTP বাস্তবায়ন ব্যবহার করার সময়, নিশ্চিত করুন যে বাস্তবায়নটি কেবলমাত্র পাবলিক এবং সিস্টেম API-এর উপর নির্ভর করে যাতে বাস্তবায়নটি MediaStore-এর সাথে ইন্টারঅ্যাক্ট করতে পারে।

কাস্টমাইজেশন

আপনি নতুন মিডিয়া ফর্ম্যাট যোগ করতে পারেন, কোন স্টোরেজ ডিভাইসগুলি সূচীবদ্ধ করা হয়েছে তা প্রভাবিত করতে পারেন, MTP স্ট্যাক প্রতিস্থাপন করতে পারেন এবং ডিফল্ট ফোল্ডারগুলি তৈরি হওয়া থেকে বাদ দিতে পারেন।

  • কাস্টম মিডিয়া ফর্ম্যাট। প্রতিটি নতুন কাস্টম মিডিয়া ফর্ম্যাটের জন্য, আপনাকে অবশ্যই অনন্য ফাইল এক্সটেনশন থেকে একটি MIME টাইপের ম্যাপিং প্রদান করতে হবে। আমরা আপনাকে IANA নিবন্ধন প্রক্রিয়া অনুসরণ করার জন্য দৃঢ়ভাবে উৎসাহিত করছি।

    • AOSP-তে ইতিমধ্যেই সংজ্ঞায়িত কোনও এক্সটেনশন বা MIME টাইপ আপনি পুনরায় সংজ্ঞায়িত করতে পারবেন না।

    • video/* এবং audio/* ফাইলের জন্য, MediaProvider MediaMetadataRetriever সাথে পরামর্শ করে চলেছে। কাস্টম ফর্ম্যাটের জন্য মেটাডেটা ফেরত দিতে Android 10 মিডিয়া এক্সট্র্যাক্টর ব্যবহার করুন।

    • image/* ফাইলের জন্য, MediaProvider মেটাডেটার জন্য Exif এর মান নির্ধারণ অব্যাহত রেখেছে। আপনি যেকোনো কাস্টম ইমেজ ফরম্যাটের জন্য Exif মেটাডেটা এক্সট্র্যাক্ট এবং রিটার্ন করতে android.media.ExifInterface এক্সটেনশন করতে পারেন।

  • স্টোরেজ ডিভাইসের ইনডেক্সিং ফ্ল্যাগ। MediaProvider StorageManager.getStorageVolumes() দ্বারা ফেরত পাঠানো সমস্ত ভলিউমকে সূচীবদ্ধ করে যেখানে StorageVolume.getMediaStoreVolumeName() নাল নয়। আপনি সূচীকৃত ভলিউমগুলিকে প্রভাবিত করার জন্য ফেরত পাঠানো ভলিউমের তালিকা কাস্টমাইজ করতে পারেন, তবে আমরা ক্ষণস্থায়ী ভলিউম (যেমন USB OTG ড্রাইভ) অন্তর্ভুক্ত না করার পরামর্শ দিচ্ছি।

  • এমটিপি স্ট্যাক প্রতিস্থাপন। অ্যান্ড্রয়েড ১১ এমটিপি স্ট্যাককে সম্পূর্ণরূপে মডিউল সীমানার বাইরে রাখে এবং নিশ্চিত করে যে এটি পাবলিক এপিআইগুলির বিরুদ্ধে কাজ করে।

  • ডিফল্ট ফোল্ডার এক্সক্লুশন তালিকা। মিডিয়াপ্রোভাইডার নতুন মাউন্ট করা স্টোরেজ ভলিউমের জন্য ডিফল্ট ফোল্ডারগুলি তৈরি করে Music/ , Podcasts/ , Ringtones/ , Alarms/ Notifications/ , Pictures/ Movies/ , Download/ , DCIM/ , Documents/ , Audiobooks/ , এবং Recordings/ ( Recordings/ ডিরেক্টরিটি Android 11 এবং তার নিচের ভার্সনে উপলব্ধ নয়) । অ্যান্ড্রয়েড 12 এবং তার উচ্চতর ভার্সনে, মূল সরঞ্জাম নির্মাতারা (OEM) ফোল্ডারগুলির জন্য একটি কেস-অসংবেদনশীল এক্সক্লুশন তালিকা প্রদান করতে পারে যা মিডিয়াপ্রোভাইডার ডিফল্ট তৈরির সময় এড়িয়ে যাওয়া উচিত। এই ফোল্ডারগুলি, উদাহরণস্বরূপ Download/ ফোল্ডার, এখনও বাইরের যুক্তি দ্বারা তৈরি করা হতে পারে।

একটি বর্জন তালিকা যোগ করতে, config_foldersToSkipInDefaultCreation রানটাইম রিসোর্স ওভারলে (RRO) ব্যবহার করুন। Notifications/ এবং Ringtones/ ডিফল্ট ফোল্ডারগুলি কীভাবে বাদ দেবেন তার একটি উদাহরণ নিচে দেওয়া হল:

<string-array name="config_foldersToSkipInDefaultCreation" translatable="false">
    <item>"Notifications"</item>
    <item>"Ringtones"</item>
</string-array>

পরীক্ষামূলক

আপনি নিম্নলিখিত পরীক্ষাগুলি ব্যবহার করে মিডিয়াপ্রোভাইডারের কার্যকারিতা যাচাই করতে পারেন:

  • MediaStore পাবলিক API-এর কার্যকারিতা যাচাই করতে, Android Compatibility Test Suite (CTS) এর CtsProviderTestCases প্যাকেজে পরীক্ষাগুলি ব্যবহার করুন।

  • MediaProvider ইন্টার্নালের কার্যকারিতা যাচাই করতে, MediaProviderTests এ পরীক্ষাগুলি ব্যবহার করুন।

উভয় সেট পরীক্ষা একসাথে চালানোর জন্য, নিম্নলিখিত atest কমান্ডটি ব্যবহার করুন:

atest --test-mapping packages/providers/MediaProvider