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

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

Android 10 এ পরিবর্তন

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

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

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

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

  • video/* এবং audio/* ফাইল ( MediaMetadataRetriever মাধ্যমে) এবং image/* ফাইল ( ExifInterface এর মাধ্যমে) থেকে প্রাসঙ্গিক ডেটা ফেরত দেওয়া।

Android 11 এ পরিবর্তন

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

  • সূচীকরণের উন্নতি। MediaProvider মডিউল এখন MediaStore পাবলিক API-এর বিরুদ্ধে উপলব্ধ মেটাডেটা সমন্বয় করে মেটাডেটা সূচী করে। পরিবর্তন অন্তর্ভুক্ত:

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

    • ইন্ডেক্সিং রঙ স্থান মেটাডেটা.

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

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

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

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

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

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

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

মডিউল সীমানা

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

প্যাকেজ বিন্যাস

MediaProvider মডিউল APK-in-APEX ফর্ম্যাটে রয়েছে।

নির্ভরতা

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

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

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

  • একটি কাস্টম (নন-এওএসপি) এমটিপি বাস্তবায়ন ব্যবহার করার সময়, নিশ্চিত করুন যে বাস্তবায়নটি মিডিয়াস্টোরের সাথে ইন্টারঅ্যাক্ট করতে বাস্তবায়ন সক্ষম করার জন্য শুধুমাত্র পাবলিক এবং সিস্টেম API-এর উপর নির্ভর করে।

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

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

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

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

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

    • image/* ফাইলের জন্য, মিডিয়াপ্রোভাইডার মেটাডেটার জন্য Exif এ স্ট্যান্ডার্ডাইজ করা চালিয়ে যাচ্ছে। যেকোনো কাস্টম ইমেজ ফরম্যাটের জন্য Exif মেটাডেটা এক্সট্র্যাক্ট এবং রিটার্ন করতে আপনি android.media.ExifInterface প্রসারিত করতে পারেন।

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

  • MTP স্ট্যাক প্রতিস্থাপন। Android 11 MTP স্ট্যাককে সম্পূর্ণরূপে মডিউল সীমানার বাইরে রাখে এবং নিশ্চিত করে যে এটি সর্বজনীন API-এর বিরুদ্ধে কাজ করে।

পরীক্ষামূলক

আপনি নিম্নলিখিত পরীক্ষাগুলি ব্যবহার করে MediaProvider এর কার্যকারিতা যাচাই করতে পারেন:

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

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

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

atest --test-mapping packages/providers/MediaProvider