অ্যান্ড্রয়েড ১১ ডেভেলপারদের জন্য দারুণ কিছু নতুন ফিচার এবং এপিআই নিয়ে এসেছে। নিচের বিভাগগুলো আপনাকে আপনার অ্যাপের জন্য ফিচারগুলো সম্পর্কে জানতে এবং সংশ্লিষ্ট এপিআইগুলো দিয়ে কাজ শুরু করতে সাহায্য করবে।
নতুন, পরিবর্তিত এবং অপসারিত API-গুলির বিস্তারিত তালিকার জন্য, API diff রিপোর্টটি পড়ুন। নতুন API-গুলির বিশদ বিবরণের জন্য Android API রেফারেন্স দেখুন — নতুন API-গুলি সহজে চোখে পড়ার জন্য হাইলাইট করা থাকে। এছাড়াও, প্ল্যাটফর্মের পরিবর্তনগুলি আপনার অ্যাপগুলিকে কোন কোন ক্ষেত্রে প্রভাবিত করতে পারে সে সম্পর্কে জানতে, Android R-কে টার্গেট করা অ্যাপগুলির এবং সমস্ত অ্যাপের জন্য Android 11-এর আচরণগত পরিবর্তনগুলি, সেইসাথে গোপনীয়তার পরিবর্তনগুলি অবশ্যই দেখে নিন।
নতুন অভিজ্ঞতা
ডিভাইস নিয়ন্ত্রণ
অ্যান্ড্রয়েড ১১-এ একটি নতুন ControlsProviderService API অন্তর্ভুক্ত করা হয়েছে, যা ব্যবহার করে আপনি সংযুক্ত, বাহ্যিক ডিভাইসগুলোর জন্য কন্ট্রোলগুলো প্রকাশ করতে পারেন। এই কন্ট্রোলগুলো অ্যান্ড্রয়েড পাওয়ার মেনুর ‘ ডিভাইস কন্ট্রোলস’ -এর অধীনে দেখা যায়। আরও তথ্যের জন্য, ‘বাহ্যিক ডিভাইস নিয়ন্ত্রণ’ দেখুন।
মিডিয়া নিয়ন্ত্রণ
অ্যান্ড্রয়েড ১১ মিডিয়া কন্ট্রোল প্রদর্শনের পদ্ধতিতে পরিবর্তন এনেছে। মিডিয়া কন্ট্রোলগুলো এখন কুইক সেটিংসের কাছেই দেখা যায়। একাধিক অ্যাপের সেশনগুলো একটি সোয়াইপযোগ্য ক্যারোসেলে সাজানো থাকে, যেখানে ফোনে স্থানীয়ভাবে প্লে হওয়া স্ট্রিম, রিমোট স্ট্রিম (যেমন বাহ্যিক ডিভাইসে শনাক্ত হওয়া স্ট্রিম বা কাস্ট সেশন), এবং সর্বশেষ প্লে হওয়ার ক্রমানুসারে পূর্ববর্তী ও পুনরায় শুরুযোগ্য সেশনগুলো অন্তর্ভুক্ত থাকে।
ব্যবহারকারীরা অ্যাপটি চালু না করেই ক্যারোসেল থেকে পূর্ববর্তী সেশনগুলো পুনরায় শুরু করতে পারেন। প্লেব্যাক শুরু হলে, ব্যবহারকারী স্বাভাবিক উপায়ে মিডিয়া কন্ট্রোলগুলো ব্যবহার করেন।
আরও তথ্যের জন্য, মিডিয়া কন্ট্রোলস দেখুন।
স্ক্রিন
জলপ্রপাত ডিসপ্লেগুলির জন্য আরও ভাল সমর্থন
অ্যান্ড্রয়েড ১১ ওয়াটারফল ডিসপ্লে সমর্থন করার জন্য বেশ কয়েকটি এপিআই প্রদান করে; এই ডিসপ্লেগুলো ডিভাইসের প্রান্তকে ঘিরে থাকে। এই ডিসপ্লেগুলোকে ডিসপ্লে কাটআউটযুক্ত ডিসপ্লের একটি প্রকারভেদ হিসেবে গণ্য করা হয়। বিদ্যমান DisplayCutout .getSafeInset…() মেথডগুলো এখন ওয়াটারফল এরিয়া এবং কাটআউট উভয়ই এড়ানোর জন্য সেফ ইনসেট রিটার্ন করে। আপনার অ্যাপের কন্টেন্ট ওয়াটারফল এরিয়াতে রেন্ডার করতে, নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
ওয়াটারফল ইনসেটের সঠিক মাপ পেতে
DisplayCutout.getWaterfallInsets()কল করুন।স্ক্রিনের সব প্রান্তের কাটআউট এবং ওয়াটারফল এলাকায় উইন্ডোটিকে প্রসারিত করার অনুমতি দিতে, উইন্ডো লেআউট অ্যাট্রিবিউট `
layoutInDisplayCutoutModeকেLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYSএ সেট করুন। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কাটআউট বা ওয়াটারফল এলাকায় কোনো অপরিহার্য কন্টেন্ট নেই।
কব্জা কোণ সেন্সর এবং ভাঁজযোগ্য
অ্যান্ড্রয়েড ১১ এখন হিঞ্জ-ভিত্তিক স্ক্রিন কনফিগারেশনযুক্ত ডিভাইসে চলমান অ্যাপগুলোকে হিঞ্জের কোণ নির্ধারণ করার সুযোগ করে দেয়। এর জন্য TYPE_HINGE_ANGLE নামের একটি নতুন সেন্সর এবং একটি নতুন SensorEvent যুক্ত করা হয়েছে, যা হিঞ্জের কোণ পর্যবেক্ষণ করে ডিভাইসের দুটি অবিচ্ছেদ্য অংশের মধ্যে ডিগ্রিতে একটি পরিমাপ প্রদান করে। ব্যবহারকারী যখন ডিভাইসটি ব্যবহার করেন, তখন এই প্রাথমিক পরিমাপগুলো ব্যবহার করে সূক্ষ্ম অ্যানিমেশন সম্পাদন করা যায়।
ফোল্ডেবলগুলো দেখুন।
কথোপকথন
কথোপকথনের উন্নতি
অ্যান্ড্রয়েড ১১ কথোপকথন পরিচালনার পদ্ধতিতে বেশ কিছু উন্নতি এনেছে। কথোপকথন হলো দুই বা ততোধিক ব্যক্তির মধ্যে রিয়েল-টাইম, দ্বিমুখী যোগাযোগ। এই কথোপকথনগুলোকে বিশেষ গুরুত্ব দেওয়া হয়েছে এবং ব্যবহারকারীরা এগুলোর সাথে কীভাবে যুক্ত হবেন, তার জন্য বেশ কিছু নতুন বিকল্প পেয়েছেন।
কথোপকথন এবং আপনার অ্যাপ কীভাবে সেগুলোকে সমর্থন করতে পারে সে সম্পর্কে আরও তথ্যের জন্য, ‘মানুষ ও কথোপকথন’ দেখুন।
চ্যাট বাবলস
সিস্টেম জুড়ে কথোপকথন দৃশ্যমান করতে ডেভেলপারদের জন্য এখন বাবলস উপলব্ধ। বাবলস অ্যান্ড্রয়েড ১০-এর একটি পরীক্ষামূলক ফিচার ছিল, যা একটি ডেভেলপার অপশনের মাধ্যমে চালু করা যেত; অ্যান্ড্রয়েড ১১-এ এর আর প্রয়োজন নেই।
যদি কোনো অ্যাপ অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার উচ্চতর সংস্করণকে টার্গেট করে, তবে এর নোটিফিকেশনগুলো বাবল হিসেবে প্রদর্শিত হয় না, যদি না সেগুলো নতুন কনভার্সেশন শর্তগুলো পূরণ করে। বিশেষত, নোটিফিকেশনটির সাথে একটি শর্টকাট যুক্ত থাকতে হবে।
অ্যান্ড্রয়েড ১১-এর আগে, কোনো নোটিফিকেশনকে বাবল করতে চাইলে, আপনাকে স্পষ্টভাবে উল্লেখ করতে হতো যে নোটিফিকেশনটি সবসময় ডকুমেন্ট UI মোডে চালু হবে। অ্যান্ড্রয়েড ১১ থেকে, আপনাকে আর স্পষ্টভাবে সেই সেটিংটি করার প্রয়োজন নেই; নোটিফিকেশনটি বাবল করা হলে, প্ল্যাটফর্মটি স্বয়ংক্রিয়ভাবে নোটিফিকেশনটিকে সবসময় ডকুমেন্ট UI মোডে চালু হওয়ার জন্য সেট করে দেয়।
বাবলের পারফরম্যান্সে বেশ কিছু উন্নতি করা হয়েছে এবং ব্যবহারকারীরা প্রতিটি অ্যাপ থেকে বাবল চালু ও বন্ধ করার ক্ষেত্রে আরও বেশি স্বাধীনতা পাবেন। যেসব ডেভেলপার পরীক্ষামূলক সাপোর্ট চালু করেছিলেন, অ্যান্ড্রয়েড ১১-এর এপিআইগুলোতে তাদের জন্য কিছু পরিবর্তন আনা হয়েছে:
- প্যারামিটারবিহীন
BubbleMetadata.Builder()কনস্ট্রাক্টরটি এখন আর ব্যবহৃত হয় না। এর পরিবর্তে,BubbleMetadata.Builder(PendingIntent, Icon)অথবাBubbleMetadata.Builder(String)এই দুটি নতুন কনস্ট্রাক্টরের যেকোনো একটি ব্যবহার করুন। - একটি শর্টকাট আইডি থেকে
BubbleMetadataতৈরি করতেBubbleMetadata.Builder(String)কল করুন। পাস করা স্ট্রিংটি অবশ্যইNotification.Builderএ দেওয়া শর্টকাট আইডির সাথে মিলতে হবে। -
Icon.createWithContentUri()অথবা নতুন মেথডcreateWithAdaptiveBitmapContentUri()ব্যবহার করে বাবল আইকন তৈরি করুন।
5G ভিজ্যুয়াল ইন্ডিকেটর
ব্যবহারকারীদের ডিভাইসে 5G নির্দেশক প্রদর্শন করার তথ্যের জন্য, 'আপনার ব্যবহারকারীদের জানান কখন তারা 5G-তে আছেন ' দেখুন।
গোপনীয়তা
ব্যবহারকারীর গোপনীয়তা বাড়াতে অ্যান্ড্রয়েড ১১-এ বহুবিধ পরিবর্তন ও বিধিনিষেধ আনা হয়েছে। আরও জানতে, গোপনীয়তা পৃষ্ঠাটি দেখুন।
নিরাপত্তা
বায়োমেট্রিক প্রমাণীকরণ আপডেট
আপনার অ্যাপের ডেটার নিরাপত্তার স্তর নিয়ন্ত্রণে সাহায্য করার জন্য, অ্যান্ড্রয়েড ১১ বায়োমেট্রিক প্রমাণীকরণে বেশ কিছু উন্নতি এনেছে। এই পরিবর্তনগুলো জেটপ্যাক বায়োমেট্রিক লাইব্রেরিতেও দেখা যায়।
প্রমাণীকরণের প্রকারভেদ
অ্যান্ড্রয়েড ১১-এ BiometricManager.Authenticators ইন্টারফেসটি চালু করা হয়েছে, যা ব্যবহার করে আপনি আপনার অ্যাপ কোন ধরনের অথেনটিকেশন সমর্থন করে তা ঘোষণা করতে পারেন ।
কোন প্রমাণীকরণ পদ্ধতি ব্যবহার করা হয়েছিল তা নির্ধারণ করুন
ব্যবহারকারী প্রমাণীকরণের পরে, আপনি getAuthenticationType() কল করে যাচাই করতে পারেন যে ব্যবহারকারী ডিভাইস ক্রেডেনশিয়াল নাকি বায়োমেট্রিক ক্রেডেনশিয়াল ব্যবহার করে প্রমাণীকরণ করেছেন।
প্রতি-ব্যবহার প্রমাণীকরণ কীগুলির জন্য অতিরিক্ত সমর্থন
অ্যান্ড্রয়েড ১১ এখন অথ-পার-ইউজ কী ব্যবহার করে অথেন্টিকেশনের জন্য আরও বেশি সমর্থন প্রদান করে।
অপ্রচলিত পদ্ধতি
অ্যান্ড্রয়েড ১১ নিম্নলিখিত মেথডগুলোকে অপ্রচলিত ঘোষণা করেছে:
-
setDeviceCredentialAllowed()মেথড। -
setUserAuthenticationValidityDurationSeconds()মেথড। -
canAuthenticate()এর ওভারলোডেড সংস্করণ, যা কোনো আর্গুমেন্ট গ্রহণ করে না।
বৃহৎ ডেটাসেটের নিরাপদ শেয়ারিং
কিছু পরিস্থিতিতে, যেমন মেশিন লার্নিং বা মিডিয়া প্লেব্যাকের ক্ষেত্রে, আপনার অ্যাপ অন্য কোনো অ্যাপের সাথে একই বড় ডেটাসেট ব্যবহার করতে চাইতে পারে। অ্যান্ড্রয়েডের আগের সংস্করণগুলিতে, আপনার অ্যাপ এবং অন্য অ্যাপ উভয়কেই একই ডেটাসেটের একটি আলাদা কপি ডাউনলোড করতে হতো।
নেটওয়ার্ক এবং ডিস্ক উভয় ক্ষেত্রেই ডেটার পুনরাবৃত্তি কমাতে সাহায্য করার জন্য, অ্যান্ড্রয়েড ১১ শেয়ার্ড ডেটা ব্লব ব্যবহার করে এই বড় ডেটাসেটগুলোকে ডিভাইসে ক্যাশ করার সুযোগ দেয়। ডেটাসেট শেয়ার করা সম্পর্কে আরও জানতে, বড় ডেটাসেট শেয়ার করার উপর বিস্তারিত নির্দেশিকাটি দেখুন।
ব্যবহারকারীর পরিচয়পত্র ছাড়াই OTA রিস্টার্টের পরে ফাইল-ভিত্তিক এনক্রিপশন সম্পাদন করুন।
ডিভাইসটি OTA আপডেট সম্পন্ন করে রিস্টার্ট হওয়ার পর, ক্রেডেনশিয়াল-সুরক্ষিত স্টোরেজে রাখা ক্রেডেনশিয়াল এনক্রিপ্টেড কী (CE) গুলো ফাইল-ভিত্তিক এনক্রিপশন (FBE) অপারেশনের জন্য তাৎক্ষণিকভাবে উপলব্ধ হয়ে যায়। এর মানে হলো, OTA আপডেটের পর, ব্যবহারকারী তার পিন, প্যাটার্ন বা পাসওয়ার্ড দেওয়ার আগেই আপনার অ্যাপ সেইসব অপারেশন পুনরায় শুরু করতে পারে যেগুলোর জন্য CE কী-এর প্রয়োজন হয়।
কর্মক্ষমতা এবং গুণমান
ওয়্যারলেস ডিবাগিং
অ্যান্ড্রয়েড ১১, অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb)-এর মাধ্যমে আপনার ওয়ার্কস্টেশন থেকে ওয়্যারলেসভাবে অ্যাপ ডেপ্লয় এবং ডিবাগ করা সমর্থন করে। উদাহরণস্বরূপ, আপনি আপনার ডিভাইসটিকে ইউএসবি-র মাধ্যমে ফিজিক্যালি কানেক্ট না করেই এবং ড্রাইভার ইনস্টলেশনের মতো সাধারণ ইউএসবি কানেকশনের সমস্যাগুলো মোকাবেলা না করেই, আপনার ডিবাগযোগ্য অ্যাপটি একাধিক রিমোট ডিভাইসে ডেপ্লয় করতে পারেন। আরও তথ্যের জন্য, ‘Run apps on a hardware device’ দেখুন।
ADB ইনক্রিমেন্টাল APK ইনস্টলেশন
ডিভাইসে বড় (২জিবি+) এপিকে ইনস্টল করতে অনেক সময় লাগতে পারে, এমনকি অ্যাপে সামান্য পরিবর্তন করা হলেও। এডিবি (অ্যান্ড্রয়েড ডিবাগ ব্রিজ) ইনক্রিমেন্টাল এপিকে ইনস্টলেশন এই প্রক্রিয়াটিকে ত্বরান্বিত করে। এটি অ্যাপটি চালু করার জন্য প্রয়োজনীয় এপিকে ফাইল ইনস্টল করে এবং বাকি ডেটা ব্যাকগ্রাউন্ডে স্ট্রিম করে। যদি ডিভাইসটি এই ফিচারটি সমর্থন করে এবং আপনার কাছে সর্বশেষ এসডিকে প্ল্যাটফর্ম-টুলস ইনস্টল করা থাকে, তবে adb install স্বয়ংক্রিয়ভাবে এটি ব্যবহার করবে। যদি এটি সমর্থিত না হয়, তবে ডিফল্ট ইনস্টলেশন পদ্ধতিটি নীরবে ব্যবহৃত হয়।
ফিচারটি ব্যবহার করতে নিম্নলিখিত adb কমান্ডটি ব্যবহার করুন। যদি ডিভাইসটি ইনক্রিমেন্টাল ইনস্টলেশন সমর্থন না করে, তাহলে কমান্ডটি ব্যর্থ হবে এবং একটি বিশদ ব্যাখ্যা প্রিন্ট করবে।
adb install --incremental
ADB ইনক্রিমেন্টাল APK ইনস্টল চালানোর আগে, আপনাকে অবশ্যই আপনার APK-তে স্বাক্ষর করতে হবে এবং একটি APK সিগনেচার স্কিম v4 ফাইল তৈরি করতে হবে। এই বৈশিষ্ট্যটি কাজ করার জন্য v4 সিগনেচার ফাইলটি অবশ্যই APK-এর পাশে রাখতে হবে।
নেটিভ মেমরি অ্যালোকেটর ব্যবহার করে ত্রুটি সনাক্তকরণ
GWP-ASan হলো একটি নেটিভ মেমোরি অ্যালোকেটর ফিচার যা ইউজ-আফটার-ফ্রি এবং হিপ-বাফার-ওভারফ্লো বাগ খুঁজে বের করতে সাহায্য করে। আপনি এই ফিচারটি গ্লোবালি অথবা আপনার অ্যাপের নির্দিষ্ট সাবপ্রসেসগুলোর জন্য সক্রিয় করতে পারেন। আরও জানতে, GWP-Asan গাইডটি দেখুন।
নিউরাল নেটওয়ার্কস এপিআই ১.৩
অ্যান্ড্রয়েড ১১ নিউরাল নেটওয়ার্কস এপিআই (NNAPI)-কে সম্প্রসারিত ও উন্নত করে।
নতুন কার্যক্রম
TensorFlow Lite-এর নতুন কোয়ান্টাইজেশন স্কিমকে সমর্থন করার জন্য NNAPI 1.3-এ TENSOR_QUANT8_ASYMM_SIGNED নামে একটি নতুন অপারেন্ড টাইপ চালু করা হয়েছে।
এছাড়াও, NNAPI 1.3 নিম্নলিখিত নতুন অপারেশনগুলো চালু করেছে:
-
QUANTIZED_LSTM -
IF -
WHILE -
ELU -
HARD_SWISH -
FILL -
RANK
নতুন এমএল নিয়ন্ত্রণ
NNAPI 1.3 মেশিন লার্নিংকে মসৃণভাবে চালাতে সাহায্য করার জন্য নতুন নিয়ন্ত্রণ ব্যবস্থা চালু করেছে:
QoS API: নতুন কোয়ালিটি অফ সার্ভিস API-তে NNAPI-এর মাধ্যমে অগ্রাধিকার নির্ধারণ এবং কাজের সময়সীমা নির্ধারণের সুবিধা যুক্ত করা হয়েছে, যার সাথে নিম্নলিখিত নতুন ফাংশনগুলো রয়েছে:
মেমরি ডোমেইন ইনপুট/আউটপুট: NNAPI 1.3 এক্সিকিউশনের জন্য ইনপুট এবং আউটপুট হিসেবে মেমরি ডোমেইনের সমর্থন অন্তর্ভুক্ত করেছে। এটি বিভিন্ন সিস্টেম কম্পোনেন্টের মধ্যে একই ডেটার অপ্রয়োজনীয় কপি দূর করে, যা অ্যান্ড্রয়েড নিউরাল নেটওয়ার্কের রানটাইম পারফরম্যান্স উন্নত করে। এই ফিচারটি
ANeuralNetworksMemoryDescএবংANeuralNetworkMemoryঅবজেক্টের সাথে ব্যবহারের জন্য এক সেট নতুন NDK API যোগ করে, যার মধ্যে নিম্নলিখিত ফাংশনগুলো অন্তর্ভুক্ত রয়েছে:-
ANeuralNetworksMemoryDesc_create() -
ANeuralNetworksMemoryDesc_free() -
ANeuralNetworksMemoryDesc_addInputRole() -
ANeuralNetworksMemoryDesc_addOutputRole() -
ANeuralNetworksMemoryDesc_setDimensions() -
ANeuralNetworksMemoryDesc_finish() -
ANeuralNetworksMemory_createFromDesc() -
ANeuralNetworksMemory_copy()
আরও জানতে, নিউরাল নেটওয়ার্ক মেমরি ডোমেন নমুনাটি দেখুন।
-
ডিপেন্ডেন্সি এপিআই এবং সিঙ্ক ফেন্স সাপোর্ট: NNAPI 1.3-এ ডিপেন্ডেন্সি সহ অ্যাসিঙ্ক্রোনাস কম্পিউটের জন্য সাপোর্ট অন্তর্ভুক্ত করা হয়েছে, যা ছোট চেইনড মডেল কল করার সময় ওভারহেড ব্যাপকভাবে হ্রাস করে। এই ফিচারটি নিম্নলিখিত নতুন ফাংশনগুলো যোগ করে:
নিয়ন্ত্রণ প্রবাহ: NNAPI 1.3-এ নতুন গ্রাফ অপারেশন
ANEURALNETWORKS_IFএবংANEURALNETWORKS_WHILEএর মাধ্যমে সাধারণ নিয়ন্ত্রণ প্রবাহের জন্য সমর্থন অন্তর্ভুক্ত করা হয়েছে, যা নতুনANEURALNETWORKS_MODELঅপারেন্ড টাইপ ব্যবহার করে আর্গুমেন্ট হিসেবে অন্যান্য মডেল গ্রহণ করে। এছাড়াও, এই বৈশিষ্ট্যটি নিম্নলিখিত নতুন ফাংশনগুলো যোগ করে:
এনডিকে থার্মাল এপিআই
ডিভাইস অতিরিক্ত গরম হয়ে গেলে, তা সিপিইউ এবং/অথবা জিপিইউ-এর গতি কমিয়ে দিতে পারে, এবং এটি অ্যাপগুলোকে অপ্রত্যাশিতভাবে প্রভাবিত করতে পারে। যেসব অ্যাপ বা গেমে জটিল গ্রাফিক্স, ভারী গণনা, বা দীর্ঘস্থায়ী নেটওয়ার্ক কার্যকলাপ অন্তর্ভুক্ত থাকে, সেগুলোতে সমস্যা দেখা দেওয়ার সম্ভাবনা বেশি থাকে।
ডিভাইসের তাপমাত্রার পরিবর্তন পর্যবেক্ষণ করতে এবং বিদ্যুৎ খরচ কম রাখতে ও ডিভাইসের তাপমাত্রা শীতল রাখতে পদক্ষেপ নিতে অ্যান্ড্রয়েড ১১-এর এনডিকে থার্মাল এপিআই (NDK Thermal API) ব্যবহার করুন। এই এপিআইটি জাভা থার্মাল এপিআই-এর (Java Thermal API) অনুরূপ; আপনি এটি ব্যবহার করে যেকোনো থার্মাল স্ট্যাটাস পরিবর্তনের জন্য নোটিফিকেশন পেতে পারেন অথবা সরাসরি বর্তমান স্ট্যাটাস পোল (poll) করতে পারেন।
টেক্সট এবং ইনপুট
উন্নত IME রূপান্তর
অ্যান্ড্রয়েড ১১ অন-স্ক্রিন কীবোর্ডের মতো ইনপুট মেথড এডিটর (IME)-এর ট্রানজিশন উন্নত করার জন্য নতুন এপিআই (API) নিয়ে এসেছে। এই এপিআইগুলো আপনার অ্যাপের কন্টেন্টকে IME-এর আবির্ভাব ও অন্তর্ধানের সাথে এবং স্ট্যাটাস ও নেভিগেশন বারের মতো অন্যান্য এলিমেন্টের সাথে সিঙ্ক্রোনাইজ করে সামঞ্জস্য করা সহজ করে তোলে।
যেকোনো EditText ফোকাস থাকা অবস্থায় একটি IME দেখানোর জন্য, view.getInsetsController(). show(Type.ime()) কল করুন। (আপনি ফোকাস করা EditText এর একই হায়ারার্কিতে থাকা যেকোনো ভিউতে এই মেথডটি কল করতে পারেন, বিশেষভাবে EditText উপরেই এটি কল করার প্রয়োজন নেই।) IME-টি লুকানোর জন্য, view.getInsetsController(). hide(Type.ime()) কল করুন। একটি IME বর্তমানে দৃশ্যমান আছে কিনা তা আপনি view.getRootWindowInsets(). isVisible(Type.ime()) কল করে পরীক্ষা করতে পারেন।
IME-এর আবির্ভাব ও অন্তর্ধানের সাথে আপনার অ্যাপের ভিউগুলোকে সিঙ্ক্রোনাইজ করতে, View.setWindowInsetsAnimationCallback() -এ একটি WindowInsetsAnimation.Callback প্রদান করে একটি ভিউতে লিসেনার সেট করুন। (আপনি এই লিসেনারটি যেকোনো ভিউতে সেট করতে পারেন, এটি EditText হতে হবে এমন কোনো বাধ্যবাধকতা নেই।) IME আপনার লিসেনারের onPrepare() মেথডটি কল করে, তারপর ট্রানজিশনের শুরুতে এটি onStart() কল করে। এরপর এটি ট্রানজিশনের প্রতিটি ধাপে onProgress() কল করে। ট্রানজিশন শেষ হয়ে গেলে, IME onEnd() কল করে। ট্রানজিশনের যেকোনো পর্যায়ে, আপনি WindowInsetsAnimation.getFraction() কল করে ট্রানজিশনটি কতটা এগিয়েছে তা জানতে পারবেন।
এই API-গুলো কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণের জন্য নতুন WindowInsetsAnimation কোড স্যাম্পলটি দেখুন।
IME অ্যানিমেশন নিয়ন্ত্রণ করা
আপনি IME অ্যানিমেশন, অথবা নেভিগেশন বারের মতো অন্য কোনো সিস্টেম বারের অ্যানিমেশনও নিয়ন্ত্রণ করতে পারেন। এটি করার জন্য, প্রথমে উইন্ডো ইনসেট পরিবর্তনের জন্য একটি নতুন লিসেনার সেট করতে setOnApplyWindowInsetsListener() কল করুন:
কোটলিন
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
জাভা
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
IME বা অন্য কোনো সিস্টেম বার সরাতে, কন্ট্রোলারের controlWindowInsetsAnimation() মেথডটি কল করুন:
কোটলিন
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
জাভা
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
আইসিইউ লাইব্রেরিগুলির আপডেট
অ্যান্ড্রয়েড ১১-এ android.icu প্যাকেজটি আপডেট করা হয়েছে, যার ফলে এখন ICU লাইব্রেরির ৬৬ নম্বর সংস্করণটি ব্যবহৃত হচ্ছে, যেখানে অ্যান্ড্রয়েড ১০-এ ছিল ৬৩ নম্বর সংস্করণ। লাইব্রেরির এই নতুন সংস্করণে হালনাগাদ করা CLDR লোকেল ডেটা এবং অ্যান্ড্রয়েডে আন্তর্জাতিকীকরণ সমর্থনের জন্য বেশ কিছু উন্নতি অন্তর্ভুক্ত রয়েছে।
লাইব্রেরির নতুন সংস্করণগুলিতে উল্লেখযোগ্য পরিবর্তনগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:
- অনেক ফরম্যাটিং এপিআই এখন একটি নতুন রিটার্ন অবজেক্ট টাইপ সমর্থন করে যা
FormattedValueএক্সটেন্ড করে। -
LocaleMatcherAPI-টিকে একটি বিল্ডার ক্লাস,java.util.Localeটাইপের সাপোর্ট এবং একটি রেজাল্ট ক্লাস দ্বারা উন্নত করা হয়েছে, যেটিতে একটি ম্যাচ সম্পর্কে অতিরিক্ত ডেটা থাকে। - এখন ইউনিকোড ১৩ সমর্থিত।
মিডিয়া
মিডিয়াকোডেক বাফার বরাদ্দ করা
অ্যান্ড্রয়েড ১১-এ নতুন MediaCodec এপিআই অন্তর্ভুক্ত করা হয়েছে, যা অ্যাপগুলোকে ইনপুট ও আউটপুট বাফার বরাদ্দ করার ক্ষেত্রে আরও বেশি নিয়ন্ত্রণ দেয়। এর ফলে আপনার অ্যাপ আরও দক্ষতার সাথে মেমোরি পরিচালনা করতে পারে।
নতুন ক্লাস:
নতুন পদ্ধতি:
-
MediaCodec.getQueueRequest() -
MediaCodec.getOutputFrame() -
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
এছাড়াও, MediaCodec.Callback() এর দুটি মেথডের আচরণ পরিবর্তিত হয়েছে:
-
onInputBufferAvailable() - ব্লক মডেল এপিআই (Block Model API) ব্যবহারের জন্য কনফিগার করা থাকলে, অ্যাপগুলোর উচিত ইনডেক্সসহ
MediaCodec.getInputBuffer()এবংMediaCodec.queueInputBuffer()কল করার পরিবর্তে ইনডেক্সসহMediaCodec.getQueueRequestব্যবহার করা এবং স্লটটিতে একটি LinearBlock/HardwareBuffer সংযুক্ত করা। -
onOutputBufferAvailable() - ইনডেক্স সহ
MediaCodec.getOutputBuffer()কল করার পরিবর্তে, অ্যাপগুলো আরও তথ্যসহOutputFrameঅবজেক্ট এবং LinearBlock/HardwareBuffer বাফারগুলো পেতে ইনডেক্স সহMediaCodec.getOutputFrame()ব্যবহার করতে পারে।
মিডিয়াকোডেকে স্বল্প-বিলম্বের ডিকোডিং
অ্যান্ড্রয়েড ১১ গেম এবং অন্যান্য রিয়েল-টাইম অ্যাপের জন্য লো-ল্যাটেন্সি ডিকোডিং সমর্থন করতে MediaCodec উন্নত করেছে। কোনো কোডেক লো-ল্যাটেন্সি ডিকোডিং সমর্থন করে কিনা, তা আপনি MediaCodecInfo.CodecCapabilities.isFeatureSupported() -এ FEATURE_LowLatency পাস করে যাচাই করতে পারেন।
লো-ল্যাটেন্সি ডিকোডিং চালু বা বন্ধ করতে, নিম্নলিখিতগুলির মধ্যে যেকোনো একটি করুন:
-
MediaCodec.configure()ব্যবহার করে নতুন কীKEY_LOW_LATENCYমান 0 অথবা 1 সেট করুন। -
MediaCodec.setParameters()ব্যবহার করে নতুন প্যারামিটার কীPARAMETER_KEY_LOW_LATENCY0 বা 1-এ সেট করুন।
নতুন AAudio ফাংশন AAudioStream_release()
AAudioStream_close() ফাংশনটি একই সাথে একটি অডিও স্ট্রিমকে রিলিজ এবং বন্ধ করে দেয়। এটি বিপজ্জনক হতে পারে। যদি অন্য কোনো প্রসেস স্ট্রিমটি বন্ধ হয়ে যাওয়ার পর সেটি অ্যাক্সেস করার চেষ্টা করে, তাহলে প্রসেসটি ক্র্যাশ করবে।
নতুন ফাংশন AAudioStream_release() স্ট্রিমটিকে রিলিজ করে, কিন্তু বন্ধ করে না। এটি এর রিসোর্সসমূহকে মুক্ত করে এবং স্ট্রিমটিকে একটি জ্ঞাত অবস্থায় রেখে দেয়। যতক্ষণ না আপনি AAudioStream_close() কল করছেন, ততক্ষণ পর্যন্ত অবজেক্টটি বিদ্যমান থাকে।
মিডিয়াপার্সার এপিআই
মিডিয়াপার্সার হলো মিডিয়া এক্সট্র্যাকশনের জন্য একটি নতুন লো-লেভেল এপিআই। এটি মিডিয়াএক্সট্র্যাক্টরের চেয়ে বেশি নমনীয় এবং মিডিয়া এক্সট্র্যাকশন কার্যকারিতার উপর অতিরিক্ত নিয়ন্ত্রণ প্রদান করে।
একটি ইউএসবি ডিভাইস থেকে অডিও ক্যাপচার
যখন RECORD_AUDIO পারমিশনবিহীন কোনো অ্যাপ্লিকেশন, UsbManager ব্যবহার করে অডিও ক্যাপচার ক্ষমতাসম্পন্ন কোনো USB অডিও ডিভাইসে (যেমন একটি USB হেডসেট) সরাসরি অ্যাক্সেসের অনুরোধ করে, তখন একটি নতুন সতর্কবার্তা প্রদর্শিত হয়, যেখানে ডিভাইসটি ব্যবহারের অনুমতি নিশ্চিত করতে বলা হয়। সিস্টেম যেকোনো “সর্বদা ব্যবহার করুন” (always use) বিকল্পকে উপেক্ষা করে, তাই প্রতিবার কোনো অ্যাপ অ্যাক্সেসের অনুরোধ করলে ব্যবহারকারীকে অবশ্যই সতর্কবার্তাটি স্বীকার করে অনুমতি দিতে হবে।
এই আচরণটি এড়ানোর জন্য, আপনার অ্যাপের RECORD_AUDIO পারমিশনটি অনুরোধ করা উচিত।
একই সাথে মাইক্রোফোন ব্যবহারের সুযোগ
অ্যান্ড্রয়েড ১১-এ AudioRecord , MediaRecorder , এবং AAudioStream API-গুলোতে নতুন মেথড যুক্ত করা হয়েছে। এই মেথডগুলো নির্বাচিত ব্যবহারের ক্ষেত্র নির্বিশেষে একই সাথে ক্যাপচার করার ক্ষমতা চালু বা বন্ধ করে। অডিও ইনপুট শেয়ারিং দেখুন।
আউটপুট সুইচার
অ্যান্ড্রয়েড ১১-এ কাস্ট এবং মিডিয়ারাউটার এপিআই ব্যবহারকারী অ্যাপগুলোর জন্য নতুন আচরণ চালু করা হয়েছে।
অ্যাপের ভেতর থেকে কাস্টিং অপশনগুলো অ্যাক্সেস করার পাশাপাশি, সুইচিং অপশনগুলো সিস্টেম মিডিয়া প্লেয়ারেও দেখা যায়। এটি ব্যবহারকারীকে ডিভাইস পরিবর্তনের সময় একটি নির্বিঘ্ন অভিজ্ঞতা দিতে সাহায্য করে, যখন তারা তাদের দেখা ও শোনার প্রেক্ষাপট বদলান; যেমন—রান্নাঘরে বসে ফোনে ভিডিও দেখা, বা বাড়িতে বা গাড়িতে অডিও শোনা। আউটপুট সুইচারটি দেখুন।
সংযোগ
ওয়াই-ফাই পাসপয়েন্টের উন্নতি
অ্যান্ড্রয়েড ১১-এ যুক্ত হওয়া পাসপয়েন্ট সক্ষমতা সম্পর্কে তথ্যের জন্য, পাসপয়েন্ট দেখুন।
ওয়াই-ফাই সাজেশন এপিআই সম্প্রসারিত করা হয়েছে
অ্যান্ড্রয়েড ১১ আপনার অ্যাপের নেটওয়ার্ক ব্যবস্থাপনার ক্ষমতা বাড়ানোর জন্য ওয়াই-ফাই সাজেশন এপিআই-কে প্রসারিত করেছে, যার মধ্যে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত রয়েছে:
- কানেক্টিভিটি ম্যানেজমেন্ট অ্যাপগুলো সংযোগ বিচ্ছিন্ন করার অনুরোধ অনুমোদন করার মাধ্যমে তাদের নিজস্ব নেটওয়ার্ক পরিচালনা করতে পারে।
- পাসপয়েন্ট নেটওয়ার্কগুলো সাজেশন এপিআই-এর সাথে সমন্বিত করা হয়েছে এবং ব্যবহারকারীকে এগুলো সাজেস্ট করা যেতে পারে।
- অ্যানালিটিক্স এপিআই আপনাকে আপনার নেটওয়ার্কের গুণমান সম্পর্কে তথ্য পেতে সক্ষম করে।
কলস্ক্রিনিং পরিষেবা আপডেট
অ্যান্ড্রয়েড ১১ থেকে, একটি কলস্ক্রিনিংসার্ভিস ইনকামিং কলের জন্য STIR/SHAKEN ভেরিফিকেশন স্ট্যাটাস (verstat) সম্পর্কে তথ্য চাইতে পারে। এই তথ্যটি ইনকামিং কলের কল ডিটেইলসের অংশ হিসেবে প্রদান করা হয়।
যদি কোনো CallScreeningService READ_CONTACTS পারমিশন থাকে, তাহলে ব্যবহারকারীর কন্ট্যাক্টে থাকা কোনো নম্বর থেকে ইনকামিং কল এলে বা সেই নম্বরে আউটগোয়িং কল এলে অ্যাপটিকে জানানো হয়।
আরও তথ্যের জন্য, কলার আইডি স্পুফিং প্রতিরোধ দেখুন।
ওপেন মোবাইল এপিআই আপডেট
Android 11 এবং এর পরবর্তী সংস্করণগুলিতে OMAPI সমর্থনের তথ্যের জন্য, Open Mobile API reader support দেখুন।
কর্মক্ষম ভিপিএন
যেসব অ্যাপ এপিআই লেভেল ৩০ বা তার বেশি টার্গেট করে অথবা এপিআই লেভেল ২৯ বা তার বেশিতে চালু হওয়া ডিভাইসে চলে, সেগুলো ব্যবহারকারী-কনফিগার করা এবং অ্যাপ-ভিত্তিক উভয় প্রকার ভিপিএন-এর জন্য IKEv2/IPsec প্রয়োগ করতে পারে।
ভিপিএনগুলো অপারেটিং সিস্টেমের সাথেই স্বয়ংক্রিয়ভাবে চলে, ফলে একটি অ্যাপে IKEv2/IPsec ভিপিএন সংযোগ স্থাপনের জন্য প্রয়োজনীয় কোড সহজ হয়ে যায়।
প্রতি-প্রক্রিয়া নেটওয়ার্ক অ্যাক্সেস নিয়ন্ত্রণ
প্রতিটি প্রসেসের জন্য আলাদাভাবে নেটওয়ার্ক অ্যাক্সেস চালু করার তথ্যের জন্য, ‘নেটওয়ার্ক ব্যবহার পরিচালনা’ দেখুন।
একই FQDN ব্যবহার করে একাধিক ইনস্টল করা পাসপয়েন্ট কনফিগারেশনের অনুমতি দিন।
অ্যান্ড্রয়েড ১১ থেকে, আপনি একটি PasspointConfiguration অবজেক্টের জন্য একটি অনন্য শনাক্তকারী পেতে PasspointConfiguration.getUniqueId() ব্যবহার করতে পারেন, যা আপনার অ্যাপের ব্যবহারকারীদের একই সম্পূর্ণ যোগ্য ডোমেইন নাম (FQDN) দিয়ে একাধিক প্রোফাইল ইনস্টল করার সুযোগ দেয়।
এই কার্যকারিতাটি তখন সহায়ক হয় যখন কোনো ক্যারিয়ার তাদের নেটওয়ার্কে মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC)-এর একাধিক সংমিশ্রণ ব্যবহার করে, কিন্তু তাদের কেবল একটিই FQDN থাকে। অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণগুলিতে, একই FQDN ব্যবহার করে একাধিক প্রোফাইল ইনস্টল করা সম্ভব, যা ব্যবহারকারী যখন MCC বা MNC সহ একটি সিম ইনস্টল করেন, তখন হোম প্রোভাইডার হিসেবে নেটওয়ার্কটিকে ম্যাচ করবে।
জিএনএসএস অ্যান্টেনা সমর্থন
অ্যান্ড্রয়েড ১১-এ GnssAntennaInfo ক্লাসটি চালু করা হয়েছে, যার ফলে আপনার অ্যাপ গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) দ্বারা প্রদত্ত সেন্টিমিটার-সঠিক পজিশনিং আরও ভালোভাবে ব্যবহার করতে পারবে।
অ্যান্টেনা ক্রমাঙ্কন সংক্রান্ত তথ্যের জন্য নির্দেশিকাটি আরও বিস্তারিত জানুন।
গ্রাফিক্স
এনডিকে ইমেজ ডিকোডার
এনডিকে ImageDecoder এপিআই অ্যান্ড্রয়েড সি/সি++ অ্যাপের জন্য সরাসরি ইমেজ ডিকোড করার একটি স্ট্যান্ডার্ড এপিআই প্রদান করে। অ্যাপ ডেভেলপারদের আর ফ্রেমওয়ার্ক এপিআই (জেএনআই-এর মাধ্যমে) বা থার্ড-পার্টি ইমেজ-ডিকোডিং লাইব্রেরি বান্ডল করার প্রয়োজন নেই। আরও তথ্যের জন্য, ইমেজ ডিকোডার ডেভেলপার গাইড দেখুন।
ফ্রেম রেট এপিআই
অ্যান্ড্রয়েড ১১ একটি এপিআই (API) প্রদান করে, যা অ্যাপগুলোকে তাদের কাঙ্ক্ষিত ফ্রেম রেট সম্পর্কে সিস্টেমকে জানাতে সক্ষম করে। এর ফলে একাধিক রিফ্রেশ রেট সমর্থনকারী ডিভাইসগুলোতে জ্যাডার (judder) কমানো যায়। এই এপিআই কীভাবে ব্যবহার করতে হয়, সে সম্পর্কে জানতে ফ্রেম রেট গাইড দেখুন।
কম লেটেন্সি সমর্থনের জন্য অনুরোধ ও যাচাই করা হচ্ছে
কিছু ডিসপ্লে, যেমন কিছু এক্সটার্নাল ডিসপ্লে এবং টিভি, গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে। এই পোস্ট-প্রসেসিং গ্রাফিক্সের মান উন্নত করে, কিন্তু ল্যাটেন্সি বাড়িয়ে দিতে পারে। HDMI 2.1 সাপোর্ট করে এমন নতুন ডিসপ্লেগুলোতে একটি অটো লো ল্যাটেন্সি মোড ( ALLM , যা গেম মোড নামেও পরিচিত) থাকে, যা এই পোস্ট-প্রসেসিং বন্ধ করে ল্যাটেন্সি কমিয়ে আনে। ALLM সম্পর্কে আরও বিস্তারিত জানতে HDMI 2.1 স্পেসিফিকেশন দেখুন।
একটি উইন্ডো অটো লো ল্যাটেন্সি মোড (ALLM) ব্যবহারের জন্য অনুরোধ করতে পারে, যদি তা উপলব্ধ থাকে। গেম এবং ভিডিও কনফারেন্সিং-এর মতো অ্যাপ্লিকেশনগুলির জন্য ALLM বিশেষভাবে উপযোগী, যেখানে সর্বোত্তম গ্রাফিক্সের চেয়ে কম ল্যাটেন্সি বেশি গুরুত্বপূর্ণ।
মিনিমাল পোস্ট-প্রসেসিং চালু বা বন্ধ করতে, Window.setPreferMinimalPostProcessing() কল করুন, অথবা উইন্ডোর preferMinimalPostProcessing অ্যাট্রিবিউটটি true তে সেট করুন। সব ডিসপ্লে মিনিমাল পোস্ট-প্রসেসিং সমর্থন করে না; কোনো নির্দিষ্ট ডিসপ্লে এটি সমর্থন করে কিনা তা জানতে, নতুন মেথড Display.isMinimalPostProcessingSupported() কল করুন।
পারফরম্যান্ট গ্রাফিক্স ডিবাগ লেয়ার ইনজেকশন
অ্যাপ্লিকেশনগুলো এখন পারফরম্যান্সের অতিরিক্ত চাপ ছাড়াই ডিবাগযোগ্য অ্যাপের মতো একই কার্যকারিতা প্রদানের জন্য নেটিভ অ্যাপ্লিকেশন কোডে এক্সটার্নাল গ্রাফিক্স লেয়ার ( GLES , Vulkan ) লোড করতে পারে। GAPID-এর মতো টুল দিয়ে আপনার অ্যাপ্লিকেশন প্রোফাইলিং করার সময় এই ফিচারটি বিশেষভাবে গুরুত্বপূর্ণ। আপনার অ্যাপ প্রোফাইল করার জন্য, অ্যাপ্লিকেশনটিকে ডিবাগযোগ্য করার পরিবর্তে আপনার অ্যাপ ম্যানিফেস্ট ফাইলে নিম্নলিখিত মেটা-ডেটা এলিমেন্টটি অন্তর্ভুক্ত করুন:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
ছবি এবং ক্যামেরা
সক্রিয় ক্যাপচারের সময় নোটিফিকেশন সাউন্ড এবং ভাইব্রেশন মিউট করুন।
অ্যান্ড্রয়েড ১১ থেকে শুরু করে, ক্যামেরা সক্রিয়ভাবে ব্যবহার করার সময়, আপনার অ্যাপ setCameraAudioRestriction() ব্যবহার করে শুধুমাত্র ভাইব্রেশন, শব্দ ও ভাইব্রেশন উভয়ই, অথবা কোনোটিই মিউট করতে পারবে না।
অ্যান্ড্রয়েড এমুলেটরে ক্যামেরার বর্ধিত সমর্থন
অ্যান্ড্রয়েড ১১ থেকে এমুলেটরে ক্যামেরার বর্ধিত সমর্থন সম্পর্কে তথ্যের জন্য, ক্যামেরা সমর্থন দেখুন।
একই সাথে একাধিক ক্যামেরা ব্যবহারের সুবিধা
অ্যান্ড্রয়েড ১১-এ এমন এপিআই যুক্ত করা হয়েছে, যার মাধ্যমে একই সময়ে একাধিক ক্যামেরা, যেমন—সামনের ও পেছনের উভয় ক্যামেরা ব্যবহারের সুবিধা আছে কিনা, তা জিজ্ঞাসা করা যাবে।
আপনার অ্যাপটি যে ডিভাইসে চলছে, সেটিতে সাপোর্ট আছে কিনা তা পরীক্ষা করতে নিম্নলিখিত পদ্ধতিগুলো ব্যবহার করুন:
-
getConcurrentCameraIds()এমন ক্যামেরা আইডিগুলোর সমন্বয়ের একটিSetফেরত দেয়, যেগুলো একই অ্যাপ্লিকেশন প্রসেস দ্বারা কনফিগার করা হলে নিশ্চিত স্ট্রিম সমন্বয়ের সাথে যুগপৎভাবে স্ট্রিম করতে পারে। -
isConcurrentSessionConfigurationSupported()ফাংশনটি জানতে চায় যে ক্যামেরা ডিভাইসগুলো সংশ্লিষ্ট সেশন কনফিগারেশনগুলো একই সাথে সমর্থন করতে পারে কিনা।
একাধিক ফ্রেম সহ HEIF ছবির জন্য উন্নততর সমর্থন
অ্যান্ড্রয়েড ১১ থেকে শুরু করে, যদি আপনি ImageDecoder.decodeDrawable() কল করেন এবং ফ্রেমের একটি ক্রম (যেমন একটি অ্যানিমেশন বা বার্স্ট ফটো) ধারণকারী একটি HEIF ইমেজ পাস করেন, তাহলে মেথডটি সম্পূর্ণ ইমেজ সিকোয়েন্সটি ধারণকারী একটি AnimatedImageDrawable রিটার্ন করে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, মেথডটি শুধুমাত্র একটি ফ্রেমের BitmapDrawable রিটার্ন করত।
যদি HEIF গ্রাফিকটিতে একাধিক ফ্রেম থাকে যা কোনো অনুক্রমে নেই, তাহলে আপনি MediaMetadataRetriever.getImageAtIndex() কল করে একটি স্বতন্ত্র ফ্রেম পুনরুদ্ধার করতে পারেন।
প্রবেশগম্যতা
অ্যাক্সেসিবিলিটি পরিষেবা ডেভেলপারদের জন্য আপডেট
আপনি যদি একটি কাস্টম অ্যাক্সেসিবিলিটি সার্ভিস তৈরি করেন, তাহলে অ্যান্ড্রয়েড ১১-এ নিম্নলিখিত ফিচারগুলো ব্যবহার করতে পারবেন:
- অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারী-মুখী ব্যাখ্যায় এখন সাধারণ টেক্সটের পাশাপাশি এইচটিএমএল এবং ছবিও ব্যবহার করা যায়। এই নমনীয়তার ফলে আপনার পরিষেবাটি কী কাজ করে এবং কীভাবে এটি তাদের সাহায্য করতে পারে, তা ব্যবহারকারীদের কাছে ব্যাখ্যা করা সহজ হয়।
-
contentDescriptionএর চেয়ে কোনো UI এলিমেন্টের অবস্থার আরও অর্থবহ বিবরণ নিয়ে কাজ করতে চাইলে, `getStateDescription()মেথডটি কল করুন। - টাচ ইভেন্টগুলোকে সিস্টেমের টাচ এক্সপ্লোরার এড়িয়ে যেতে অনুরোধ করতে,
setTouchExplorationPassthroughRegion()কল করুন। একইভাবে, জেসচারগুলোকে সিস্টেমের জেসচার ডিটেক্টর এড়িয়ে যেতে অনুরোধ করতে,setGestureDetectionPassthroughRegion()কল করুন। - আপনি "enter" এবং "next"-এর মতো IME অ্যাকশনগুলির পাশাপাশি
FLAG_SECUREফ্ল্যাগ সক্রিয় করা নেই এমন উইন্ডোগুলির স্ক্রিনশটের জন্য অনুরোধ করতে পারেন।
অতিরিক্ত বৈশিষ্ট্য
অ্যাপ প্রক্রিয়া বন্ধ হওয়ার কারণ
অ্যান্ড্রয়েড ১১-এ ActivityManager.getHistoricalProcessExitReasons() মেথডটি চালু করা হয়েছে, যা সাম্প্রতিক যেকোনো প্রসেস বন্ধ হয়ে যাওয়ার কারণগুলো জানায়। অ্যাপগুলো এই মেথডটি ব্যবহার করে ক্র্যাশ ডায়াগনস্টিক তথ্য সংগ্রহ করতে পারে, যেমন কোনো প্রসেস বন্ধ হওয়ার কারণ ANR, মেমরি সংক্রান্ত সমস্যা, নাকি অন্য কিছু। এছাড়াও, পরবর্তী বিশ্লেষণের জন্য কাস্টম স্টেট তথ্য সংরক্ষণ করতে আপনি নতুন setProcessStateSummary() মেথডটি ব্যবহার করতে পারেন।
getHistoricalProcessExitReasons() মেথডটি ApplicationExitInfo ক্লাসের ইনস্ট্যান্স রিটার্ন করে, যেখানে একটি অ্যাপ প্রসেসের মৃত্যু সম্পর্কিত তথ্য থাকে। এই ক্লাসের কোনো ইনস্ট্যান্সে getReason() কল করার মাধ্যমে, আপনি জানতে পারবেন কেন আপনার অ্যাপের প্রসেসটি বন্ধ করা হয়েছিল। উদাহরণস্বরূপ, REASON_CRASH রিটার্ন ভ্যালুটি নির্দেশ করে যে আপনার অ্যাপে একটি আনহ্যান্ডেলড এক্সেপশন ঘটেছে। যদি আপনার অ্যাপকে এক্সিট ইভেন্টগুলোর অনন্যতা নিশ্চিত করতে হয়, তবে এটি একটি অ্যাপ-নির্দিষ্ট আইডেন্টিফায়ার বজায় রাখতে পারে, যেমন getTimestamp() মেথডের টাইমস্ট্যাম্পের উপর ভিত্তি করে একটি হ্যাশ ভ্যালু।
অতিরিক্ত সম্পদ
আরও তথ্যের জন্য, মিডিয়ামে অ্যাপগুলোকে আরও ব্যক্তিগত ও স্থিতিশীল করার জন্য অ্যান্ড্রয়েড ১১-এর নতুন টুলগুলো সম্পর্কে লেখা আর্টিকেলটি পড়ুন।
রিসোর্স লোডার
অ্যান্ড্রয়েড ১১ একটি নতুন এপিআই চালু করেছে যা অ্যাপগুলোকে রিসোর্স অনুসন্ধান এবং লোড করার পদ্ধতিকে গতিশীলভাবে প্রসারিত করার সুযোগ দেয়। নতুন এই কার্যকারিতা প্রদানের জন্য প্রধানত ResourcesLoader এবং ResourcesProvider নতুন এপিআই ক্লাসগুলো দায়ী। একত্রে, এগুলো অতিরিক্ত রিসোর্স ও অ্যাসেট সরবরাহ করার, অথবা বিদ্যমান রিসোর্স ও অ্যাসেটগুলোর মান পরিবর্তন করার ক্ষমতা প্রদান করে।
ResourcesLoader অবজেক্ট হলো এমন কন্টেইনার যা একটি অ্যাপের Resources ইনস্ট্যান্সে ResourcesProvider অবজেক্ট সরবরাহ করে। এর বিনিময়ে, ResourcesProvider অবজেক্টগুলো APK এবং রিসোর্স টেবিল থেকে রিসোর্স ডেটা লোড করার জন্য মেথড প্রদান করে।
এই API-এর একটি প্রধান ব্যবহার হলো কাস্টম অ্যাসেট লোডিং। আপনি loadFromDirectory() ব্যবহার করে একটি ResourcesProvider তৈরি করতে পারেন, যা ফাইল-ভিত্তিক রিসোর্স এবং অ্যাসেটের রেজোলিউশনকে পুনঃনির্দেশিত করে, ফলে এটি অ্যাপ্লিকেশন APK-এর পরিবর্তে একটি নির্দিষ্ট ডিরেক্টরিতে অনুসন্ধান করে। APK-তে বান্ডেল করা অ্যাসেটগুলোর মতোই, আপনি AssetManager API ক্লাসের ` open() মেথডগুলোর মাধ্যমে এই অ্যাসেটগুলো অ্যাক্সেস করতে পারেন।
এপিকে স্বাক্ষর স্কিম v4
অ্যান্ড্রয়েড ১১-এ এপিকে সিগনেচার স্কিম ভি৪ (APK Signature Scheme v4 )-এর সাপোর্ট যুক্ত করা হয়েছে। এই স্কিমটি একটি আলাদা ফাইলে ( apk-name .apk.idsig ) এক নতুন ধরনের সিগনেচার তৈরি করে, তবে অন্যথায় এটি ভি২ এবং ভি৩-এর মতোই। এপিকে-তে কোনো পরিবর্তন করা হয় না। এই স্কিমটি এডিবি ইনক্রিমেন্টাল এপিকে ইনস্টলেশন (ADB incremental APK installation) সমর্থন করে, যা এপিকে ইনস্টলের গতি বাড়িয়ে দেয়।
ডাইনামিক ইন্টেন্ট ফিল্টার
ইনটেন্ট গ্রহণ করার জন্য, একটি অ্যাপকে অবশ্যই কম্পাইল টাইমে অ্যাপ ম্যানিফেস্টে একটি ইনটেন্ট ফিল্টার সংজ্ঞায়িত করে ঘোষণা করতে হয় যে এটি কোন ধরনের ডেটা গ্রহণ করতে সক্ষম। অ্যান্ড্রয়েড ১০ এবং এর নিচের সংস্করণগুলোতে, অ্যাপগুলোর রানটাইমে তাদের ইনটেন্ট ফিল্টার পরিবর্তন করার কোনো উপায় নেই। এটি ভার্চুয়ালাইজেশন অ্যাপগুলোর (যেমন ভার্চুয়াল মেশিন এবং রিমোট ডেস্কটপ) জন্য একটি সমস্যা, কারণ ব্যবহারকারী সেগুলোর ভেতরে ঠিক কী সফটওয়্যার ইনস্টল করবে তা জানার কোনো উপায় তাদের থাকে না।
অ্যান্ড্রয়েড ১১-এ MIME গ্রুপ চালু করা হয়েছে, যা একটি নতুন ম্যানিফেস্ট এলিমেন্ট। এটি একটি অ্যাপকে ইন্টেন্ট ফিল্টারে ডাইনামিক MIME টাইপের একটি সেট ঘোষণা করতে এবং রানটাইমে প্রোগ্রাম্যাটিকভাবে তা পরিবর্তন করার সুযোগ দেয়। MIME গ্রুপ ব্যবহার করতে, আপনার অ্যাপ ম্যানিফেস্টে নতুন android:mimeGroup অ্যাট্রিবিউটসহ একটি ডেটা এলিমেন্ট অন্তর্ভুক্ত করুন:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
android:mimeGroup অ্যাট্রিবিউটের মান হলো একটি যথেচ্ছ স্ট্রিং আইডি, যা রানটাইমে MIME গ্রুপকে শনাক্ত করে। PackageManager API` ক্লাসের নিম্নলিখিত নতুন মেথডগুলিতে এর আইডি পাস করে আপনি একটি MIME গ্রুপের বিষয়বস্তু অ্যাক্সেস এবং আপডেট করতে পারেন:
যখন আপনি প্রোগ্রাম্যাটিকভাবে কোনো MIME গ্রুপে একটি MIME টাইপ যোগ করেন, তখন এটি ম্যানিফেস্টে স্পষ্টভাবে ঘোষিত একটি স্ট্যাটিক MIME টাইপের মতোই হুবহু কাজ করে।
অটোফিল উন্নতকরণ
অ্যান্ড্রয়েড ১১ অটোফিল পরিষেবাগুলিতে বেশ কিছু উন্নতি এনেছে।
AssistStructure.ViewNode-এ ইঙ্গিত শনাক্তকারী
প্রায়শই অটোফিল সার্ভিসগুলোর জন্য কোনো ভিউ-এর প্রোপার্টিগুলোর উপর ভিত্তি করে সেটির সিগনেচার হ্যাশ গণনা করা দরকার হয়। সিগনেচার হ্যাশ গণনা করার সময় ভিউ হিন্ট প্রোপার্টিটি অন্তর্ভুক্ত করা বিশেষভাবে ভালো, কিন্তু ফোনের লোকেলের সাথে হিন্ট স্ট্রিংটি পরিবর্তিত হতে পারে। এই সমস্যা সমাধানের জন্য, অ্যান্ড্রয়েড ১১ AssistStructure.ViewNode একটি নতুন getHintIdEntry() মেথড দিয়ে প্রসারিত করেছে, যা একটি ভিউ-এর হিন্ট টেক্সটের জন্য রিসোর্স আইডেন্টিফায়ার রিটার্ন করে। এই মেথডটি একটি লোকেল-নিরপেক্ষ ভ্যালু প্রদান করে যা আপনি সিগনেচার হ্যাশ গণনা করতে ব্যবহার করতে পারেন।
প্রদর্শিত ইভেন্ট ডেটাসেট
অটোফিল সার্ভিসগুলোকে তাদের সাজেশন উন্নত করতে সাহায্য করার জন্য, অ্যান্ড্রয়েড ১১ এমন পরিস্থিতি শনাক্ত করার একটি উপায় প্রদান করে যেখানে একটি অটোফিল সার্ভিস ডেটাসেট উপস্থাপন করেছে কিন্তু ব্যবহারকারী সেগুলোর কোনোটিই নির্বাচন করেননি। অ্যান্ড্রয়েড ১১-এ, FillEventHistory একটি নতুন TYPE_DATASETS_SHOWN ইভেন্ট টাইপ রিপোর্ট করে। যখনই অটোফিল সার্ভিস ব্যবহারকারীর কাছে এক বা একাধিক ডেটাসেট উপস্থাপন করে, তখনই FillEventHistory এই ধরনের একটি ইভেন্ট লগ করে। ব্যবহারকারী প্রদত্ত অটোফিল অপশনগুলোর মধ্যে কোনোটি নির্বাচন করেছেন কিনা তা নির্ধারণ করতে অটোফিল সার্ভিসগুলো বিদ্যমান TYPE_DATASET_SELECTED ইভেন্টের সাথে এই ইভেন্টগুলো ব্যবহার করতে পারে।
আইএমই ইন্টিগ্রেশন
কিবোর্ড এবং অন্যান্য আইএমই (IME) এখন ড্রপ-ডাউন মেনুর পরিবর্তে, একটি সাজেশন স্ট্রিপ বা অনুরূপ ইন্টারফেসে ইনলাইনভাবে অটোফিল সাজেশন প্রদর্শন করতে পারে। পাসওয়ার্ড এবং ক্রেডিট-কার্ড নম্বরের মতো সংবেদনশীল তথ্য সুরক্ষিত রাখতে, সাজেশনগুলো ব্যবহারকারীকে দেখানো হলেও, ব্যবহারকারী কোনো একটি নির্বাচন না করা পর্যন্ত আইএমই (IME) সে সম্পর্কে অবগত থাকে না। আইএমই (IME) এবং পাসওয়ার্ড ম্যানেজারগুলো কীভাবে এই ফিচারটি সাপোর্ট করতে পারে, সে সম্পর্কে তথ্যের জন্য “কিবোর্ডের সাথে অটোফিল ইন্টিগ্রেট করা” (Integrating autofill with keyboards) দেখুন।
কন্টেন্ট ক্যাপচার পরিষেবার সাথে ডেটা শেয়ারিং
অ্যান্ড্রয়েড ১১ থেকে, আপনার অ্যাপ ডিভাইসের কন্টেন্ট ক্যাপচার সার্ভিসের সাথে ডেটা শেয়ার করতে পারবে। এই সক্ষমতার ফলে ডিভাইসের পক্ষে প্রাসঙ্গিক তথ্য সরবরাহ করা সহজ হয়, যেমন ব্যবহারকারীর পরিবেশে বর্তমানে বাজতে থাকা কোনো গানের নাম দেখানো।
To make data from your app available to the content capture service, call the shareData() method on an instance of ContentCaptureManager . If the system accepts the data-sharing request, your app receives a write-only file descriptor to share with the content capture service.