Android 11-এ ডেভেলপারদের জন্য দারুণ নতুন ফিচার ও API নিয়ে আসা হয়েছে। নিচের বিভাগগুলি আপনাকে অ্যাপের ফিচার সম্পর্কে জানতে এবং সংশ্লিষ্ট API ব্যবহার শুরু করতে সাহায্য করবে।
নতুন, পরিবর্তিত এবং সরানো API-এর বিস্তারিত তালিকার জন্য, API ডিফারেন্স রিপোর্ট পড়ুন। নতুন API সম্পর্কে বিস্তারিত জানতে Android API রেফারেন্স দেখুন — নতুন API হাইলাইট করা আছে যাতে সহজে দেখা যায়। এছাড়াও, প্ল্যাটফর্মে পরিবর্তন করা হলে আপনার অ্যাপে তার প্রভাব পড়তে পারে, এমন ক্ষেত্র সম্পর্কে জানতে, Android 11-এর আচরণে পরিবর্তন Android R-কে টার্গেট করা অ্যাপের জন্য এবং সব অ্যাপের জন্য, সেইসাথে গোপনীয়তা সংক্রান্ত পরিবর্তন চেক করতে ভুলবেন না।
নতুন অভিজ্ঞতা
ডিভাইস কন্ট্রোল
Android 11-এ একটি নতুন ControlsProviderService API অন্তর্ভুক্ত করা হয়েছে যা
আপনি কানেক্ট করা, এক্সটার্নাল ডিভাইসের জন্য কন্ট্রোল দেখাতে ব্যবহার করতে পারবেন। এইসব কন্ট্রোল
Android পাওয়ার মেনুর ডিভাইস কন্ট্রোল বিকল্পের মধ্যে দেখা যায়। আরও তথ্যের জন্য, এক্সটার্নাল ডিভাইস নিয়ন্ত্রণ করুন দেখুন।
মিডিয়া কন্ট্রোল
Android 11-এ মিডিয়া কন্ট্রোল কীভাবে দেখানো হয় তা আপডেট করা হয়েছে। মিডিয়া কন্ট্রোল দ্রুত সেটিংসের কাছে দেখা যায়। একাধিক অ্যাপের সেশন সোয়াইপ করা যায় এমন ক্যারোজেলে সাজানো থাকে যার মধ্যে ফোনে লোকালি চলা স্ট্রিম, রিমোট স্ট্রিম, যেমন এক্সটার্নাল ডিভাইসে শনাক্ত করা স্ট্রিম বা কাস্ট সেশন এবং আগের, আবার শুরু করা যায় এমন সেশন যে ক্রমে শেষবার চালানো হয়েছিল সেই ক্রমে থাকে।
ব্যবহারকারীরা অ্যাপ চালু না করেই ক্যারোজেল থেকে আগের সেশন রিস্টার্ট করতে পারবেন। প্লেব্যাক শুরু হলে, ব্যবহারকারী স্বাভাবিক উপায়ে মিডিয়া কন্ট্রোলের সাথে ইন্টার্যাক্ট করেন।
আরও তথ্যের জন্য, মিডিয়া কন্ট্রোল দেখুন।
স্ক্রিন
ওয়াটারফল ডিসপ্লের জন্য আরও ভালো সহায়তা
Android 11-এ ওয়াটারফল ডিসপ্লে,
অর্থাৎ ডিভাইসের
কিনারায় মোড়ানো ডিসপ্লেতে কাজ করার জন্য একাধিক API আছে। এইসব ডিসপ্লেকে ডিসপ্লে কাটআউট সহ ডিসপ্লের
ভেরিয়েন্ট হিসেবে বিবেচনা করা হয়। আগে থেকে থাকা
DisplayCutout.getSafeInset…()
পদ্ধতি এখন ওয়াটারফল এরিয়া ও কাটআউট এড়িয়ে যাওয়ার জন্য নিরাপদ ইনসেট ফিরিয়ে আনে।
ওয়াটারফল এরিয়াতে আপনার অ্যাপ কন্টেন্ট রেন্ডার করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
ওয়াটারফল ইনসেটের সঠিক মাপ জানতে
DisplayCutout.getWaterfallInsets()কল করুন।উইন্ডো লেআউট অ্যাট্রিবিউট
layoutInDisplayCutoutMode-কেLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYSহিসেবে সেট করুন যাতে উইন্ডোটি স্ক্রিনের সব প্রান্তে কাট-আউট এবং ওয়াটারফল এরিয়াতে প্রসারিত হতে পারে। আপনাকে নিশ্চিত করতে হবে যে কাটআউট বা ওয়াটারফল এরিয়াতে কোনও গুরুত্বপূর্ণ কন্টেন্ট নেই।
হিঞ্জ অ্যাঙ্গেল সেন্সর ও ফোল্ডেবল
Android 11-এর মাধ্যমে হিঞ্জ-ভিত্তিক স্ক্রিন কনফিগারেশন সহ ডিভাইসে
রান করা অ্যাপের পক্ষে হিঞ্জের কোণ নির্ধারণ করা সম্ভব হয়।
এর জন্য TYPE_HINGE_ANGLE সহ একটি নতুন সেন্সর
এবং একটি নতুন
SensorEvent প্রদান করা হয় যা
হিঞ্জের কোণ মনিটর করতে পারে এবং ডিভাইসের দুটি অবিচ্ছেদ্য অংশের মধ্যে
ডিগ্রিতে পরিমাপ প্রদান করে। ব্যবহারকারী ডিভাইস ম্যানিপুলেট করার সময় আপনি গ্র্যানুলার অ্যানিমেশন পারফর্ম করতে
এইসব র-মেজারমেন্ট ব্যবহার করতে পারবেন।
Foldables দেখুন।
কথোপকথনগুলি
কথোপকথনের উন্নতি
Android 11-এ কথোপকথন ম্যানেজ করার পদ্ধতিতে অনেক উন্নতি করা হয়েছে। কথোপকথন হল দুই বা তার বেশি ব্যক্তির মধ্যে রিয়েল-টাইম, দ্বিমুখী যোগাযোগ। এইসব কথোপকথনকে বিশেষ গুরুত্ব দেওয়া হয় এবং ব্যবহারকারীদের কাছে এগুলির সাথে ইন্টার্যাক্ট করার জন্য বেশ কিছু নতুন বিকল্প থাকে।
কথোপকথন এবং আপনার অ্যাপ কীভাবে সেগুলি সাপোর্ট করতে পারে সেই সম্পর্কে আরও তথ্যের জন্য, ব্যক্তি এবং কথোপকথন দেখুন।
চ্যাট বাবল
সিস্টেম জুড়ে কথোপকথন আরও সহজে খুঁজে পেতে ডেভেলপারদের সাহায্য করার জন্য এখন বাবল উপলভ্য। Android 10-এ বাবল একটি পরীক্ষামূলক ফিচার ছিল যা ডেভেলপার বিকল্পের মাধ্যমে চালু করা হয়েছিল; Android 11-এ এটি আর প্রয়োজন নেই।
কোনও অ্যাপ Android 11 (API লেভেল ৩০) বা তার পরবর্তী ভার্সনকে টার্গেট করলে, নতুন কথোপকথন সংক্রান্ত প্রয়োজনীয়তা পূরণ না করা পর্যন্ত সেটির বিজ্ঞপ্তি বাবল হিসেবে দেখানো হয় না। বিশেষ করে, বিজ্ঞপ্তিটি অবশ্যই একটি শর্টকাটের সাথে যুক্ত হতে হবে।
Android 11-এর আগে, আপনি যদি কোনও বিজ্ঞপ্তি বাবল হিসেবে দেখতে চাইতেন, তাহলে আপনাকে স্পষ্টভাবে উল্লেখ করতে হত যে বিজ্ঞপ্তিটি ডকুমেন্ট UI মোডে সবসময় চালু করার জন্য সেট করা হয়েছে। Android 11 থেকে শুরু করে, আপনাকে আর স্পষ্টভাবে সেই সেটিং করতে হবে না; বিজ্ঞপ্তিটি বাবল করা হলে, প্ল্যাটফর্মটি অটোমেটিক বিজ্ঞপ্তিটিকে ডকুমেন্ট UI মোডে সর্বদা চালু করার জন্য সেট করে।
বাবল পারফর্ম্যান্সে অনেক উন্নতি করা হয়েছে এবং ব্যবহারকারীরা প্রতিটি অ্যাপ থেকে বাবল চালু ও বন্ধ করার ক্ষেত্রে আরও বেশি নমনীয়তা পাবেন। যেসব ডেভেলপার পরীক্ষামূলক সহায়তা প্রয়োগ করেছেন, তাদের জন্য Android ১১-এর API-তে কিছু পরিবর্তন করা হয়েছে:
- প্যারামিটার ছাড়া
BubbleMetadata.Builder()কনস্ট্রাক্টর বন্ধ করা হয়েছে। পরিবর্তে, দুটি নতুন কনস্ট্রাক্টরের যেকোনও একটি ব্যবহার করুনBubbleMetadata.Builder(PendingIntent, Icon)বাBubbleMetadata.Builder(String)। BubbleMetadata.Builder(String)-এ কল করে শর্টকাট আইডি থেকেBubbleMetadataতৈরি করুন। পাস করা স্ট্রিংটিNotification.Builder-এ প্রদান করা শর্টকাট আইডির সাথে মিলতে হবে।Icon.createWithContentUri()বা নতুন পদ্ধতিcreateWithAdaptiveBitmapContentUri()ব্যবহার করে বাবল আইকন তৈরি করুন।
5G ভিজ্যুয়াল ইন্ডিকেটর
ব্যবহারকারীর ডিভাইসে 5G ইন্ডিকেটর দেখানোর ব্যাপারে তথ্য পেতে, ব্যবহারকারী 5G ব্যবহার করলে তাকে জানান দেখুন।
গোপনীয়তা
ব্যবহারকারীর গোপনীয়তা আরও উন্নত করতে Android 11-এ অনেক পরিবর্তন ও বিধিনিষেধ করা হয়েছে। আরও জানতে, গোপনীয়তা পৃষ্ঠা দেখুন।
নিরাপত্তা
বায়োমেট্রিক যাচাইকরণ সংক্রান্ত আপডেট
আপনার অ্যাপের ডেটার জন্য নিরাপত্তার লেভেল নিয়ন্ত্রণ করতে আপনাকে সাহায্য করার জন্য, Android 11 বায়োমেট্রিক যাচাইকরণের ক্ষেত্রে বেশ কিছু উন্নতি প্রদান করে। এই পরিবর্তনগুলি Jetpack Biometric লাইব্রেরিতেও দেখা যায়।
যাচাইকরণের ধরন
Android 11-এ
BiometricManager.Authenticators
ইন্টারফেস চালু করা হয়েছে, যা ব্যবহার করে আপনি আপনার অ্যাপে কাজ করে এমন যাচাইকরণের ধরন
ঘোষণা করতে পারবেন।
কোন যাচাইকরণের ধরন ব্যবহার করা হয়েছে তা নির্ধারণ করুন
ব্যবহারকারী যাচাইকরণ করার পরে, আপনি চেক করতে পারবেন যে ব্যবহারকারী ডিভাইসের ক্রেডেনশিয়াল বা বায়োমেট্রিক ক্রেডেনশিয়াল ব্যবহার করে যাচাইকরণ করেছেন কিনা। এর জন্য আপনাকে
getAuthenticationType()-এ কল করতে হবে।
প্রতিবার ব্যবহারের জন্য অথেন্টিকেশন কী-এর জন্য অতিরিক্ত সহায়তা
Android 11 auth-per-use কী ব্যবহার করে যাচাইকরণ করার জন্য আরও সহায়তা প্রদান করে।
বন্ধ হয়ে যাওয়া পদ্ধতি
Android 11-এ নিম্নলিখিত পদ্ধতিগুলি বাতিল করা হয়েছে:
setDeviceCredentialAllowed()পদ্ধতি।setUserAuthenticationValidityDurationSeconds()পদ্ধতি।canAuthenticate()-এর ওভারলোড করা ভার্সন যা কোনও আর্গুমেন্ট নেয় না।
বড় ডেটাসেটের নিরাপদ শেয়ারিং
কিছু পরিস্থিতিতে, যেমন মেশিন লার্নিং বা মিডিয়া প্লেব্যাকের মতো ক্ষেত্রে, আপনার অ্যাপ অন্য অ্যাপের মতো একই বড় ডেটাসেট ব্যবহার করতে চাইতে পারে। Android-এর আগের ভার্সনে, আপনার অ্যাপ এবং অন্য অ্যাপকে একই ডেটাসেটের আলাদা কপি ডাউনলোড করতে হত।
নেটওয়ার্ক ও ডিস্ক, দুটিতেই ডেটা রিডানডেন্সি কমাতে সাহায্য করার জন্য, Android 11 শেয়ার করা ডেটা ব্লব ব্যবহার করে ডিভাইসে এইসব বড় ডেটাসেট ক্যাশে করার অনুমতি দেয়। ডেটাসেট শেয়ার করা সম্পর্কে আরও জানতে, বড় ডেটাসেট শেয়ার করার বিষয়ে বিস্তারিত গাইড দেখুন।
ব্যবহারকারীর ক্রেডেনশিয়াল ছাড়াই OTA রিস্টার্টের পরে ফাইল-ভিত্তিক এনক্রিপশন করা
ডিভাইস OTA আপডেট সম্পূর্ণ করে রিস্টার্ট করার পরে, ক্রেডেনশিয়াল-সুরক্ষিত স্টোরেজে থাকা ক্রেডেনশিয়াল এনক্রিপ্টেড কী (CE) অবিলম্বে ফাইল-ভিত্তিক এনক্রিপশন (FBE) অপারেশনের জন্য উপলভ্য হয়। এর অর্থ হল, OTA আপডেটের পরে, আপনার অ্যাপ সেইসব অপারেশন আবার শুরু করতে পারে যেগুলির জন্য ব্যবহারকারী পিন, প্যাটার্ন বা পাসওয়ার্ড লেখার আগে CE কী প্রয়োজন।
পারফর্ম্যান্স এবং কোয়ালিটি
ওয়্যারলেস ডিবাগিং
Android 11-এ Android ডিবাগ ব্রিজের (adb) মাধ্যমে আপনার ওয়ার্কস্টেশন থেকে ওয়্যারলেসভাবে আপনার অ্যাপ ডিপ্লয় ও ডিবাগ করার সুবিধা রয়েছে। যেমন, আপনি USB-এর মাধ্যমে আপনার ডিভাইস ফিজিক্যালি কানেক্ট না করেই এবং ড্রাইভার ইনস্টলেশনের মতো সাধারণ USB কানেকশন সংক্রান্ত সমস্যা ছাড়াই একাধিক রিমোট ডিভাইসে আপনার ডিবাগ করা যায় এমন অ্যাপ ডিপ্লয় করতে পারবেন। আরও তথ্যের জন্য, হার্ডওয়্যার ডিভাইসে অ্যাপ রান করুন দেখুন।
ADB ইনক্রিমেন্টাল APK ইনস্টলেশন
কোনও ডিভাইসে বড় (২ জিবি+) APK ইনস্টল করতে অনেক সময় লাগতে পারে, এমনকি অ্যাপে
ছোটখাটো পরিবর্তন করা হলেও। ADB (Android ডিবাগ ব্রিজ) ইনক্রিমেন্টাল APK
ইনস্টলেশন এই প্রসেসকে দ্রুত করে। এটি ব্যাকগ্রাউন্ডে বাকি ডেটা স্ট্রিম করার সময়
অ্যাপ লঞ্চ করার জন্য যথেষ্ট APK ইনস্টল করে। ডিভাইসে এই ফিচার কাজ করলে এবং আপনার কাছে লেটেস্ট SDK প্ল্যাটফর্ম-টুল ইনস্টল করা থাকলে, adb install অটোমেটিক এই ফিচার ব্যবহার করবে। এটি কাজ না করলে, ডিফল্ট ইনস্টলেশন পদ্ধতি ব্যবহার করা হয়।
ফিচারটি ব্যবহার করতে নিম্নলিখিত adb কমান্ড ব্যবহার করুন। ডিভাইসে ইনক্রিমেন্টাল ইনস্টলেশন কাজ না করলে, কমান্ড ব্যর্থ হয় এবং বিস্তারিত ব্যাখ্যা প্রিন্ট করে।
adb install --incremental
ADB ইনক্রিমেন্টাল APK ইনস্টল করার আগে, আপনাকে অবশ্যই APK-তে সই করতে হবে এবং একটি APK Signature Scheme v4 ফাইল তৈরি করতে হবে। এই ফিচার কাজ করার জন্য v4 সিগনেচার ফাইলটি APK-এর ঠিক পরেই রাখতে হবে।
নেটিভ মেমরি অ্যালোকেটর ব্যবহার করে সমস্যা ডিটেক্ট করা
GWP-ASan হল একটি নেটিভ মেমরি অ্যালোকেটর ফিচার যা ইউজ-আফটার-ফ্রি এবং হিপ-বাফার-ওভারফ্লো বাগ খুঁজে পেতে সাহায্য করে। আপনি এই ফিচারটি বিশ্বব্যাপী বা আপনার অ্যাপের নির্দিষ্ট সাবপ্রসেসের জন্য চালু করতে পারেন। আরও জানতে, GWP-Asan গাইড দেখুন।
Neural Networks API 1.3
Android 11-এ Neural Networks API (NNAPI) আরও উন্নত করা হয়েছে।
নতুন অপারেশন
NNAPI 1.3-এ নতুন অপারেন্ড টাইপ, TENSOR_QUANT8_ASYMM_SIGNED, নিয়ে আসা হয়েছে, যাতে
TensorFlow Lite-এর নতুন কোয়ান্টাইজেশন
স্কিম কাজ করে।
এছাড়াও, NNAPI 1.3-এ নিম্নলিখিত নতুন অপারেশন যোগ করা হয়েছে:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
নতুন ML কন্ট্রোল
মেশিন লার্নিং যাতে নির্বিঘ্নে চলে তার জন্য NNAPI 1.3 নতুন কন্ট্রোল নিয়ে এসেছে:
QoS API: নতুন কোয়ালিটি অফ সার্ভিস API-তে NNAPI-তে অগ্রাধিকার ও টাস্কের ডেডলাইনের জন্য সহায়তা অন্তর্ভুক্ত আছে, যার মধ্যে নিম্নলিখিত নতুন ফাংশন আছে:
মেমরি ডোমেন ইনপুট/আউটপুট: NNAPI 1.3-এ এক্সিকিউশনের ইনপুট ও আউটপুট হিসেবে মেমরি ডোমেনের জন্য সহায়তা অন্তর্ভুক্ত। এটি বিভিন্ন সিস্টেম কম্পোনেন্টের মধ্যে একই ডেটার অপ্রয়োজনীয় কপি সরিয়ে দেয়, যার ফলে Android নিউরাল নেটওয়ার্কের রানটাইম পারফর্ম্যান্স উন্নত হয়। এই ফিচারটি
ANeuralNetworksMemoryDescএবংANeuralNetworkMemoryঅবজেক্টের সাথে ব্যবহার করার জন্য নতুন NDK API-এর একটি সেট যোগ করে, যার মধ্যে নিম্নলিখিত ফাংশনগুলি অন্তর্ভুক্ত রয়েছে:ANeuralNetworksMemoryDesc_create()ANeuralNetworksMemoryDesc_free()ANeuralNetworksMemoryDesc_addInputRole()ANeuralNetworksMemoryDesc_addOutputRole()ANeuralNetworksMemoryDesc_setDimensions()ANeuralNetworksMemoryDesc_finish()ANeuralNetworksMemory_createFromDesc()ANeuralNetworksMemory_copy()
আরও জানতে, নিউরাল নেটওয়ার্ক মেমরি ডোমেন স্যাম্পেল দেখুন।
ডিপেন্ডেন্সি API ও সিঙ্ক ফেন্স সাপোর্ট: NNAPI 1.3-এ ডিপেন্ডেন্সি সহ অ্যাসিঙ্ক্রোনাস কম্পিউটের জন্য সাপোর্ট অন্তর্ভুক্ত, যা ছোট চেইনড মডেলগুলি চালু করার সময় ওভারহেডকে ব্যাপকভাবে হ্রাস করার অনুমতি দেয়। এই ফিচার নিম্নলিখিত নতুন ফাংশন যোগ করে:
কন্ট্রোল ফ্লো: NNAPI 1.3-এ সাধারণ কন্ট্রোল ফ্লোর জন্য সহায়তা অন্তর্ভুক্ত আছে, নতুন গ্রাফ অপারেশন
ANEURALNETWORKS_IFএবংANEURALNETWORKS_WHILE-এর সাথে, যা নতুনANEURALNETWORKS_MODELঅপারেন্ড টাইপ ব্যবহার করে আর্গুমেন্ট হিসেবে অন্যান্য মডেল গ্রহণ করে। এছাড়াও, এই ফিচার নিম্নলিখিত নতুন ফাংশন যোগ করে:
NDK Thermal API
ডিভাইস খুব গরম হয়ে গেলে, CPU এবং/অথবা GPU-এর পারফর্ম্যান্স কমে যেতে পারে এবং এর ফলে অ্যাপের উপর অপ্রত্যাশিত প্রভাব পড়তে পারে। যেসব অ্যাপ বা গেমে জটিল গ্রাফিক্স, ভারী কম্পিউটেশন বা একটানা নেটওয়ার্ক অ্যাক্টিভিটি থাকে, সেগুলিতে সমস্যা হওয়ার সম্ভাবনা বেশি।
Android 11-এ ডিভাইসের তাপমাত্রা পরিবর্তন মনিটর করতে NDK Thermal API ব্যবহার করুন এবং তারপর কম পাওয়ার ব্যবহার ও ডিভাইসের তাপমাত্রা কম রাখার জন্য অ্যাকশন নিন। এই API-টি Java Thermal API-এর মতো; আপনি এটি ব্যবহার করে থার্মাল স্ট্যাটাসে কোনও পরিবর্তন হলে বিজ্ঞপ্তি পেতে পারেন অথবা সরাসরি বর্তমান স্ট্যাটাস পোল করতে পারেন।
টেক্সট ও ইনপুট
উন্নত IME ট্রানজিশন
Android 11-এ ইনপুট পদ্ধতি এডিটর (IME) যেমন, স্ক্রিনের কীবোর্ডের জন্য ট্রানজিশন উন্নত করতে নতুন API নিয়ে আসা হয়েছে। এইসব API-এর সাহায্যে IME-এর উপস্থিতি ও অনুপস্থিতি এবং স্ট্যাটাস ও নেভিগেশন বারের মতো অন্যান্য এলিমেন্টের সাথে সিঙ্ক করে আপনার অ্যাপের কন্টেন্ট অ্যাডজাস্ট করা আরও সহজ হয়।
কোনও EditText-এ ফোকাস থাকাকালীন IME দেখাতে, view.getInsetsController().show(Type.ime())-এ কল করুন।
(আপনি ফোকাস করা EditText-এর মতো একই হায়ারার্কিতে যেকোনও ভিউতে এই পদ্ধতিটি কল করতে পারেন, আপনাকে বিশেষভাবে EditText-এ এটি কল করতে হবে না।) IME লুকাতে, view.getInsetsController().hide(Type.ime()) কল করুন।
view.getRootWindowInsets().isVisible(Type.ime())-এ কল করে আপনি চেক করতে পারবেন যে বর্তমানে কোনও IME দেখা যাচ্ছে কিনা।
IME-এর উপস্থিতি ও অনুপস্থিতির সাথে আপনার অ্যাপের ভিউ সিঙ্ক করতে, View.setWindowInsetsAnimationCallback()-এ
WindowInsetsAnimation.Callback
প্রদান করে ভিউতে লিসেনার সেট করুন।
(আপনি এই লিসনারকে যেকোনও ভিউতে সেট করতে পারবেন, এটি EditText হতে হবে না।)
IME আপনার লিসনারের
onPrepare()
মেথডকে কল করে, তারপর এটি ট্রানজিশনের শুরুতে
onStart()
কল করে। তারপর এটি ট্রানজিশনের প্রতিটি প্রগ্রেশনে
onProgress()
কল করে। ট্রানজিশন শেষ হয়ে গেলে, IME
onEnd() কল করে।
ট্রানজিশনের যেকোনও পর্যায়ে, আপনি WindowInsetsAnimation.getFraction()-এ কল করে জানতে পারবেন যে ট্রানজিশন কতটা এগিয়েছে।
এইসব API কীভাবে ব্যবহার করতে হয় তার উদাহরণ দেখতে, নতুন WindowInsetsAnimation কোড স্যাম্পেল দেখুন।
IME অ্যানিমেশন নিয়ন্ত্রণ করা হচ্ছে
এছাড়াও, আপনি IME অ্যানিমেশন বা নেভিগেশন বারের মতো অন্য সিস্টেম বারের অ্যানিমেশন
নিয়ন্ত্রণ করতে পারবেন। এটি করতে, প্রথমে
setOnApplyWindowInsetsListener()
কল করুন যাতে উইন্ডো ইনসেট পরিবর্তনের জন্য নতুন লিসেনার সেট করা যায়:
Kotlin
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()
মেথড কল করুন:
Kotlin
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() {} });
ICU লাইব্রেরিতে আপডেট
Android 11, android.icu প্যাকেজ আপডেট করে যাতে
ICU লাইব্রেরির ৬৬ ভার্সন ব্যবহার করা যায়,
Android 10-এ ৬৩ ভার্সন ব্যবহার করা হয়। নতুন লাইব্রেরি ভার্সনে আপডেট করা CLDR লোকাল ডেটা
এবং Android-এ আন্তর্জাতিকীকরণ সংক্রান্ত সহায়তার জন্য বেশ কিছু উন্নতি অন্তর্ভুক্ত আছে।
নতুন লাইব্রেরি ভার্সনে উল্লেখযোগ্য পরিবর্তনগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
- অনেক ফর্ম্যাটিং API এখন নতুন রিটার্ন অবজেক্ট টাইপ সাপোর্ট করে যা
FormattedValue-কে এক্সটেন্ড করে। LocaleMatcherAPI-কে বিল্ডার ক্লাস,java.util.Localeধরনের জন্য সহায়তা এবং ম্যাচের ব্যাপারে অতিরিক্ত ডেটা সহ ফলাফল ক্লাসের মাধ্যমে উন্নত করা হয়েছে।- Unicode 13 এখন কাজ করে।
মিডিয়া
MediaCodec বাফার অ্যালোকেট করা হচ্ছে
Android 11-এ নতুন MediaCodec API অন্তর্ভুক্ত আছে যা ইনপুট ও আউটপুট বাফার বরাদ্দ করার সময়
অ্যাপকে আরও বেশি নিয়ন্ত্রণ দেয়। এটি আপনার
অ্যাপকে আরও দক্ষতার সাথে মেমরি ম্যানেজ করতে দেয়।
নতুন ক্লাস:
নতুন পদ্ধতি:
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
এছাড়াও, MediaCodec.Callback()-এ দুটি পদ্ধতির আচরণ পরিবর্তিত হয়েছে:
onInputBufferAvailable()- ইন্ডেক্স সহ
MediaCodec.getInputBuffer()এবংMediaCodec.queueInputBuffer()কল করার পরিবর্তে, Block Model API ব্যবহার করার জন্য কনফিগার করা থাকলে, অ্যাপের উচিত ইন্ডেক্স সহMediaCodec.getQueueRequestব্যবহার করা, স্লটে LinearBlock/HardwareBuffer অ্যাটাচ করা। onOutputBufferAvailable()- ইনডেক্স সহ
MediaCodec.getOutputBuffer()কল করার পরিবর্তে, অ্যাপগুলি আরও তথ্য এবং LinearBlock/HardwareBuffer বাফার সহOutputFrameঅবজেক্ট পেতে ইনডেক্স সহMediaCodec.getOutputFrame()ব্যবহার করতে পারে।
MediaCodec-এ লো-লেটেন্সি ডিকোডিং
গেম ও অন্যান্য রিয়েল-টাইম অ্যাপের জন্য কম-লেটেন্সি ডিকোডিংয়ে সহায়তা করতে Android 11
MediaCodec
উন্নত করে। আপনি
FEATURE_LowLatency
থেকে
MediaCodecInfo.CodecCapabilities.isFeatureSupported()-এ
পাস করে কোনও কোডেক লো-লেটেন্সি ডিকোডিং সাপোর্ট করে কিনা তা চেক করতে পারবেন।
কম-লেটেন্সি ডিকোডিং চালু বা বন্ধ করতে, নিম্নলিখিত যেকোনও একটি কাজ করুন:
MediaCodec.configure()ব্যবহার করে নতুন কীKEY_LOW_LATENCY০ বা ১-এ সেট করুন।MediaCodec.setParameters()ব্যবহার করে নতুন প্যারামিটার কীPARAMETER_KEY_LOW_LATENCY০ বা ১-এ সেট করুন।
নতুন AAudio ফাংশন AAudioStream_release()
AAudioStream_close()
ফাংশনটি
একই সাথে অডিও স্ট্রিম রিলিজ ও বন্ধ করে। এটি বিপজ্জনক হতে পারে। স্ট্রিম বন্ধ হয়ে যাওয়ার পরে অন্য কোনও প্রসেস সেটি অ্যাক্সেস করার চেষ্টা করলে, প্রসেসটি
ক্র্যাশ করবে।
নতুন ফাংশন
AAudioStream_release()
স্ট্রিম রিলিজ করে কিন্তু বন্ধ করে না। এটি এর রিসোর্স খালি করে এবং
স্ট্রিমকে একটি পরিচিত অবস্থায় ছেড়ে দেয়। আপনি AAudioStream_close() কল না করা পর্যন্ত অবজেক্টটি থেকে যায়।
MediaParser API
MediaParser হল মিডিয়া এক্সট্র্যাকশনের জন্য নতুন লো লেভেল API। এটি MediaExtractor-এর চেয়ে বেশি নমনীয় এবং মিডিয়া এক্সট্র্যাকশন ফাংশনালিটির উপর অতিরিক্ত নিয়ন্ত্রণ প্রদান করে।
USB ডিভাইস থেকে অডিও ক্যাপচার করা
RECORD_AUDIO অনুমতি ছাড়া কোনও অ্যাপ্লিকেশন অডিও ক্যাপচার করার ক্ষমতা (যেমন USB হেডসেট) সহ USB অডিও ডিভাইসে সরাসরি অ্যাক্সেসের অনুরোধ করতে UsbManager ব্যবহার করলে, একটি নতুন সতর্কতামূলক মেসেজ দেখানো হয় যেখানে ব্যবহারকারীকে ডিভাইসটি ব্যবহার করার অনুমতি কনফার্ম করতে বলা হয়। সিস্টেম যেকোনও "সবসময়
ব্যবহার করুন" বিকল্প উপেক্ষা করে, তাই ব্যবহারকারীকে অবশ্যই সতর্কতা স্বীকার করতে হবে এবং প্রতিবার
কোনও অ্যাপ অ্যাক্সেসের অনুরোধ করলে অনুমতি দিতে হবে।
এই আচরণ এড়াতে, আপনার অ্যাপের RECORD_AUDIO অনুমতি চাওয়া উচিত।
একই সাথে মাইক অ্যাক্সেস করা
Android 11-এ AudioRecord, MediaRecorder এবং
AAudioStream API-এর জন্য নতুন পদ্ধতি যোগ করা হয়েছে। এই পদ্ধতিগুলি বেছে নেওয়া ব্যবহারের ক্ষেত্রে নির্বিশেষে
একসাথে ক্যাপচার করার ক্ষমতা চালু এবং বন্ধ করে। অডিও ইনপুট শেয়ার করা দেখুন।
আউটপুট সুইচার
Android 11, কাস্ট এবং মিডিয়ারাউটার API ব্যবহার করে এমন অ্যাপের জন্য নতুন আচরণ প্রয়োগ করে।
কোনও অ্যাপের মধ্যে থেকে কাস্টিং বিকল্প অ্যাক্সেস করার পাশাপাশি, সিস্টেম মিডিয়া প্লেয়ারেও সুইচ করার বিকল্প দেখা যায়। এর ফলে, ব্যবহারকারী এক ডিভাইস থেকে অন্য ডিভাইসে কন্টেন্ট দেখার বা শোনার সময় নির্বিঘ্ন অভিজ্ঞতা পান, যেমন রান্নাঘরে ভিডিও দেখা বনাম ফোনে ভিডিও দেখা, অথবা বাড়িতে অডিও শোনা বনাম গাড়িতে অডিও শোনা। আউটপুট সুইচার দেখুন।
কানেক্টিভিটি
ওয়াই-ফাই পাসপয়েন্ট সংক্রান্ত উন্নতি
Android 11-এ যোগ করা পাসপয়েন্ট ক্ষমতা সম্পর্কে তথ্যের জন্য, পাসপয়েন্ট দেখুন।
Wi-Fi সাজেশন API বড় করা হয়েছে
Android 11 আপনার অ্যাপের নেটওয়ার্ক ম্যানেজমেন্ট ক্ষমতা বাড়াতে Wi-Fi সাজেশন API আরও উন্নত করে, যার মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:
- কানেক্টিভিটি ম্যানেজমেন্ট অ্যাপ ডিসকানেক্ট করার অনুরোধ অনুমোদন করে নিজের নেটওয়ার্ক ম্যানেজ করতে পারে।
- পাসপয়েন্ট নেটওয়ার্ক সাজেশন API-তে ইন্টিগ্রেট করা থাকে এবং ব্যবহারকারীকে সাজেস্ট করা যেতে পারে।
- Analytics API আপনাকে নেটওয়ার্কের কোয়ালিটি সম্পর্কে তথ্য পেতে সাহায্য করে।
CallScreeningService আপডেট
Android 11 থেকে শুরু করে, CallScreeningService ইনকামিং কলের জন্য STIR/SHAKEN যাচাইকরণ স্ট্যাটাস (verstat) সম্পর্কে তথ্য অনুরোধ করতে পারে। ইনকামিং কলের জন্য কলের বিবরণ -এর অংশ হিসেবে এই তথ্য প্রদান করা হয়।
CallScreeningService-এর কাছে
READ_CONTACTS
অনুমতি থাকলে, ব্যবহারকারীর পরিচিতি তালিকায় থাকা কোনও নম্বর থেকে ইনকামিং কল এলে বা সেই নম্বরে আউটগোয়িং কল করা হলে, অ্যাপকে বিজ্ঞপ্তি পাঠানো হয়।
আরও তথ্যের জন্য, কলার আইডি স্পুফিং আটকানো দেখুন।
Open Mobile API আপডেট
Android 11 ও তার পরবর্তী ভার্সনে OMAPI সাপোর্ট সম্পর্কে তথ্য পেতে, Open Mobile API রিডার সাপোর্ট দেখুন।
পারফর্ম্যান্ট VPN
যেসব অ্যাপ API লেভেল ৩০ ও তার বেশি ভার্সনকে টার্গেট করে অথবা API লেভেল ২৯ ও তার বেশি ভার্সনে লঞ্চ হওয়া ডিভাইসে রান করে, সেগুলি ব্যবহারকারীর কনফিগার করা ও অ্যাপ-ভিত্তিক VPN-এর জন্য IKEv2/IPsec প্রয়োগ করতে পারে।
VPN অপারেটিং সিস্টেমের নেটিভ হিসেবে রান করে, যা কোনও অ্যাপে IKEv2/IPsec VPN কানেকশন তৈরি করার জন্য প্রয়োজনীয় কোডকে সহজ করে তোলে।
প্রসেস-প্রতি নেটওয়ার্ক অ্যাক্সেস কন্ট্রোল
প্রতিটি প্রসেসের ভিত্তিতে নেটওয়ার্ক অ্যাক্সেস চালু করার ব্যাপারে তথ্য পেতে, নেটওয়ার্ক ব্যবহার ম্যানেজ করুন দেখুন।
একই FQDN-এর সাথে একাধিক ইনস্টল করা পাসপয়েন্ট কনফিগারেশনের অনুমতি দিন
Android ১১ থেকে শুরু করে, আপনি
PasspointConfiguration.getUniqueId()
ব্যবহার করে PasspointConfiguration অবজেক্টের জন্য অনন্য শনাক্তযোগ্য পেতে পারেন, যা আপনার অ্যাপের ব্যবহারকারীদের একই সম্পূর্ণভাবে উপযুক্ত ডোমেনের নাম (FQDN) সহ একাধিক প্রোফাইল ইনস্টল করতে দেয়।
এই কার্যকারিতাটি তখন সহায়ক হয় যখন কোনও পরিষেবা প্রদানকারী তাদের নেটওয়ার্কে মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC)-এর একাধিক সংমিশ্রণ ব্যবহার করে, কিন্তু শুধুমাত্র একটি FQDN থাকে। Android 11 ও তার পরবর্তী ভার্সনে, একই FQDN সহ একাধিক প্রোফাইল ইনস্টল করা সম্ভব যা ব্যবহারকারী MCC বা MNC সহ সিম ইনস্টল করলে হোম প্রোভাইডার হিসেবে নেটওয়ার্কের সাথে ম্যাচ করবে।
GNSS অ্যান্টেনা সাপোর্ট
Android 11-এ
GnssAntennaInfo ক্লাস চালু করা হয়েছে, যার ফলে আপনার অ্যাপ
গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) দ্বারা প্রদান করা সেন্টিমিটার-অ্যাকুরেসি পজিশনিং
আরও বেশি ব্যবহার করতে পারে।
অ্যান্টেনা ক্যালিব্রেশন তথ্য সংক্রান্ত নির্দেশিকা থেকে আরও জানুন।
গ্রাফিক্স
NDK ইমেজ ডিকোডার
NDK ImageDecoder API, Android C/C++ অ্যাপের জন্য
সরাসরি ছবি ডিকোড করার স্ট্যান্ডার্ড API প্রদান করে। অ্যাপ ডেভেলপারদের আর ফ্রেমওয়ার্ক API (JNI-এর মাধ্যমে) ব্যবহার করতে বা থার্ড-পার্টি ইমেজ-ডিকোডিং লাইব্রেরি বান্ডেল করতে হবে না। আরও তথ্যের জন্য, ইমেজ ডিকোডার ডেভেলপার নির্দেশিকা দেখুন।
ফ্রেম রেট API
Android 11 একটি API প্রদান করে যা অ্যাপগুলিকে তাদের উদ্দিষ্ট ফ্রেম রেট সিস্টেমকে জানাতে সক্ষম করে, একাধিক রিফ্রেশ রেট সমর্থন করে এমন ডিভাইসে জুডার কমাতে। এই API কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে তথ্য পেতে, ফ্রেম রেট সংক্রান্ত গাইড দেখুন।
কম লেটেন্সি সংক্রান্ত সহায়তার জন্য অনুরোধ করা ও চেক করা
কিছু ডিসপ্লে গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে, যেমন কিছু এক্সটার্নাল ডিসপ্লে এবং টিভি। এই পোস্ট-প্রসেসিং গ্রাফিক্স উন্নত করে কিন্তু লেটেন্সি বাড়াতে পারে। HDMI 2.1 কাজ করে এমন নতুন ডিসপ্লেতে অটোমেটিক লো লেটেন্সি মোড (ALLM, যা গেম মোড নামেও পরিচিত) থাকে, যা এই পোস্ট-প্রসেসিং বন্ধ করে দিয়ে লেটেন্সি কম করে। ALLM সম্পর্কে আরও জানতে, HDMI 2.1 স্পেসিফিকেশন দেখুন।
কোনও উইন্ডো অটোমেটিক লো লেটেন্সি মোড ব্যবহার করার অনুরোধ করতে পারে, যদি এটি উপলভ্য থাকে। গেম ও ভিডিও কনফারেন্সিংয়ের মতো অ্যাপ্লিকেশনের ক্ষেত্রে ALLM বিশেষভাবে উপযোগী, যেখানে সেরা গ্রাফিক্সের চেয়ে কম লেটেন্সি বেশি গুরুত্বপূর্ণ।
ন্যূনতম পোস্ট-প্রসেসিং টগল করে চালু বা বন্ধ করতে, Window.setPreferMinimalPostProcessing() কল করুন,
অথবা উইন্ডোর
preferMinimalPostProcessing
অ্যাট্রিবিউট true-এ সেট করুন। সব ডিসপ্লেতে ন্যূনতম পোস্ট-প্রসেসিং কাজ করে না; কোনও নির্দিষ্ট ডিসপ্লেতে এটি কাজ করে কিনা তা জানতে, নতুন পদ্ধতি
Display.isMinimalPostProcessingSupported() কল করুন।
পারফর্ম্যান্ট গ্রাফিক্স ডিবাগ লেয়ার ইনজেকশন
অ্যাপ্লিকেশন এখন নেটিভ অ্যাপ্লিকেশন কোডে এক্সটার্নাল গ্রাফিক্স লেয়ার (GLES, Vulkan) লোড করতে পারে যাতে ডিবাগ করা যায় এমন অ্যাপের মতো একই কার্যকারিতা প্রকাশ করা যায়, তবে পারফর্ম্যান্স ওভারহেড ছাড়াই। GAPID-এর মতো টুল ব্যবহার করে আপনার অ্যাপ্লিকেশনের প্রোফাইলিং করার সময় এই ফিচারটি বিশেষভাবে গুরুত্বপূর্ণ। আপনার অ্যাপের প্রোফাইল তৈরি করতে, অ্যাপ্লিকেশন ডিবাগ করার পরিবর্তে আপনার অ্যাপ ম্যানিফেস্ট ফাইলে নিম্নলিখিত মেটা-ডেটা এলিমেন্ট অন্তর্ভুক্ত করুন:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
ছবি ও ক্যামেরা
ক্যাপচার করার সময় বিজ্ঞপ্তির সাউন্ড ও ভাইব্রেশন মিউট করুন
Android 11 থেকে শুরু করে, ক্যামেরা অ্যাক্টিভভাবে ব্যবহার করার সময়, আপনার
অ্যাপ শুধুমাত্র ভাইব্রেশন, সাউন্ড ও ভাইব্রেশন দুটোই অথবা কোনওটাই মিউট করতে পারবে না, setCameraAudioRestriction() ব্যবহার করে।
Android এমুলেটরে ক্যামেরার জন্য আরও বেশি সহায়তা
Android 11 থেকে শুরু করে এমুলেটরে ক্যামেরার জন্য বর্ধিত সহায়তা সম্পর্কে তথ্যের জন্য, ক্যামেরা সহায়তা দেখুন।
একাধিক ক্যামেরা একসাথে ব্যবহার করার সুবিধা
Android 11-এ API যোগ করা হয়েছে যাতে একই সাথে একাধিক ক্যামেরা ব্যবহার করার জন্য কোয়েরি করা যায়, এর মধ্যে ফ্রন্ট-ফেসিং ও রিয়ার-ফেসিং ক্যামেরা অন্তর্ভুক্ত।
আপনার অ্যাপ যে ডিভাইসে চলছে তাতে সহায়তা চেক করতে, নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
getConcurrentCameraIds()ক্যামেরা আইডির কম্বিনেশনের একটিSetরিটার্ন করে যা একই অ্যাপ্লিকেশন প্রসেস দ্বারা কনফিগার করা হলে গ্যারান্টিযুক্ত স্ট্রিম কম্বিনেশনের সাথে একই সাথে স্ট্রিম করতে পারে।isConcurrentSessionConfigurationSupported()ক্যামেরা ডিভাইস একই সাথে সংশ্লিষ্ট সেশন কনফিগারেশন সাপোর্ট করতে পারে কিনা তা কোয়েরি করে।
একাধিক ফ্রেম সহ HEIF ছবির জন্য আরও ভালো সহায়তা
Android ১১ থেকে শুরু করে, আপনি যদি ImageDecoder.decodeDrawable() কল করেন এবং ফ্রেমের সিকোয়েন্স (যেমন, অ্যানিমেশন বা বার্স্ট ফটো) সহ HEIF ছবি পাস করেন, তাহলে পদ্ধতিটি সম্পূর্ণ ছবির সিকোয়েন্স সহ AnimatedImageDrawable ফিরিয়ে দেয়। Android-এর আগের ভার্সনে, এই পদ্ধতি শুধুমাত্র একটি ফ্রেমের BitmapDrawable রিটার্ন করত।
HEIF গ্রাফিকে একাধিক ফ্রেম থাকলে এবং সেগুলি ক্রমানুসারে না থাকলে, আপনি MediaMetadataRetriever.getImageAtIndex() কল করে স্বতন্ত্র ফ্রেম ফিরিয়ে আনতে পারবেন।
অ্যাক্সেসিবিলিটি
অ্যাক্সেসিবিলিটি পরিষেবা ডেভেলপারদের জন্য আপডেট
আপনি কাস্টম অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করলে, Android ১১-এ নিম্নলিখিত ফিচার ব্যবহার করতে পারবেন:
- ব্যবহারকারী নিজে ইন্টার্যাক্ট করতে পারেন এমন অ্যাক্সেসিবিলিটি পরিষেবার ব্যাখ্যায় এখন প্লেন টেক্সটের পাশাপাশি HTML ও ছবি ব্যবহার করা যায়। এই নমনীয়তা আপনার পরিষেবা কী করে এবং কীভাবে তা ব্যবহারকারীদের সাহায্য করতে পারে তা ব্যাখ্যা করা সহজ করে তোলে।
contentDescription-এর চেয়ে আরও বেশি শব্দার্থগতভাবে অর্থপূর্ণ UI এলিমেন্টের স্ট্যাটাসের বিবরণ নিয়ে কাজ করতে,getStateDescription()মেথড কল করুন।- টাচ ইভেন্ট যাতে সিস্টেমের টাচ এক্সপ্লোরারকে বাইপাস করে তার অনুরোধ করতে,
setTouchExplorationPassthroughRegion()কল করুন। একইভাবে, সিস্টেমের জেসচার ডিটেক্টরকে বাইপাস করার জন্য জেসচারকে অনুরোধ করতে,setGestureDetectionPassthroughRegion()কল করুন। - আপনি IME অ্যাকশনের জন্য অনুরোধ করতে পারেন, যেমন "enter" এবং "next", এর পাশাপাশি
উইন্ডোর স্ক্রিনশট যা
FLAG_SECUREফ্ল্যাগ চালু করে না।
অতিরিক্ত ফিচার
অ্যাপ প্রসেস থেকে বেরিয়ে আসার কারণ
Android 11-এ
ActivityManager.getHistoricalProcessExitReasons()
পদ্ধতি চালু করা হয়েছে, যা সাম্প্রতিক কোনও প্রসেস বন্ধ হওয়ার কারণ রিপোর্ট করে। অ্যাপ
এই পদ্ধতি ব্যবহার করে ক্র্যাশ ডায়াগনস্টিক তথ্য সংগ্রহ করতে পারে, যেমন কোনও
প্রসেস বন্ধ হওয়ার কারণ ANR, মেমরি সংক্রান্ত সমস্যা নাকি অন্য কিছু।
এছাড়াও, আপনি নতুন
setProcessStateSummary()
পদ্ধতি ব্যবহার করে কাস্টম স্টেট তথ্য স্টোর করতে পারবেন যা পরে বিশ্লেষণ করা যাবে।
getHistoricalProcessExitReasons() পদ্ধতিটি
ApplicationExitInfo
ক্লাসের ইনস্ট্যান্স রিটার্ন করে, যার মধ্যে অ্যাপ প্রসেস বন্ধ হয়ে যাওয়া সম্পর্কিত তথ্য থাকে। এই ক্লাসের একটি ইনস্ট্যান্সে
getReason() কল করার মাধ্যমে, আপনার অ্যাপের প্রসেস কেন বন্ধ হয়ে গেছে তা আপনি নির্ধারণ করতে পারবেন। যেমন, REASON_CRASH রিটার্ন ভ্যালু থেকে বোঝা যায় যে
আপনার অ্যাপে কোনও আনহ্যান্ডেলড এক্সেপশন ঘটেছে। আপনার অ্যাপকে যদি এক্সিট ইভেন্টের জন্য
ইউনিকনেস নিশ্চিত করতে হয়, তাহলে এটি অ্যাপ-নির্দিষ্ট শনাক্তকারী বজায় রাখতে পারে, যেমন
getTimestamp()
পদ্ধতি থেকে টাইমস্ট্যাম্পের উপর ভিত্তি করে
হ্যাশ ভ্যালু।
অতিরিক্ত রিসোর্স
আরও তথ্যের জন্য, Medium-এ অ্যাপকে আরও ব্যক্তিগত ও স্থিতিশীল করার জন্য নতুন Android 11 টুল সম্পর্কিত নিবন্ধটি পড়ুন।
রিসোর্স লোডার
Android 11-এ একটি নতুন API চালু করা হয়েছে যা অ্যাপকে ডায়নামিক্যালি
রিসোর্স সার্চ ও লোড করার পদ্ধতিকে আরও উন্নত করতে দেয়। নতুন API ক্লাস
ResourcesLoader
এবং
ResourcesProvider
নতুন কার্যকারিতা প্রদান করার জন্য মূলত দায়ী। একসাথে, তারা
অতিরিক্ত রিসোর্স এবং অ্যাসেট সরবরাহ করার বা বিদ্যমান রিসোর্স এবং অ্যাসেটের মান পরিবর্তন করার
ক্ষমতা প্রদান করে।
ResourcesLoader অবজেক্ট হল কন্টেনার যা অ্যাপের
Resources ইনস্ট্যান্সে
ResourcesProvider অবজেক্ট সরবরাহ করে। পরিবর্তে, ResourcesProvider অবজেক্ট APK এবং রিসোর্স টেবিল থেকে রিসোর্স ডেটা লোড করার পদ্ধতি প্রদান করে।
এই API-এর একটি প্রাথমিক ব্যবহার হল কাস্টম অ্যাসেট লোড করা। আপনি
loadFromDirectory()
ব্যবহার করে এমন একটি ResourcesProvider তৈরি করতে পারেন যা ফাইল-ভিত্তিক রিসোর্স ও অ্যাসেটের রেজোলিউশন রিডাইরেক্ট করে, যার ফলে এটি অ্যাপ্লিকেশন APK-এর পরিবর্তে একটি নির্দিষ্ট ডিরেক্টরি সার্চ করে। আপনি এইসব অ্যাসেট অ্যাক্সেস করতে পারবেন
AssetManager
API ক্লাস থেকে open() ফ্যামিলি অফ মেথডের মাধ্যমে, ঠিক যেমন APK-তে অ্যাসেট বান্ডেল করা থাকে।
APK সিগনেচার স্কিম v4
Android 11-এ APK Signature Scheme v4-এর জন্য সহায়তা যোগ করা হয়েছে। এই স্কিম
আলাদা ফাইলে (apk-name.apk.idsig) নতুন ধরনের স্বাক্ষর তৈরি করে, তবে
অন্যান্য ক্ষেত্রে v2 ও v3-এর মতোই। APK-তে কোনও পরিবর্তন করা হয়নি। এই স্কিম
ADB ইনক্রিমেন্টাল APK ইনস্টলেশন সাপোর্ট করে, যা APK ইনস্টল করার প্রসেসকে দ্রুত করে।
ডায়নামিক ইনটেন্ট ফিল্টার
ইনটেন্ট পেতে, কোনও অ্যাপকে কম্পাইল করার সময় অবশ্যই ঘোষণা করতে হবে যে এটি কোন ধরনের ডেটা পেতে পারে। অ্যাপ ম্যানিফেস্টে ইনটেন্ট ফিল্টার সংজ্ঞায়িত করার মাধ্যমে এটি করা হয়। Android 10 এবং তার আগের ভার্সনে, রানটাইমে অ্যাপের ইনটেন্ট ফিল্টার পরিবর্তন করার কোনও উপায় নেই। এটি ভার্চুয়ালাইজেশন অ্যাপের (যেমন ভার্চুয়াল মেশিন ও রিমোট ডেস্কটপ) ক্ষেত্রে সমস্যা তৈরি করে, কারণ ব্যবহারকারী এর মধ্যে ঠিক কোন সফ্টওয়্যার ইনস্টল করবেন তা জানার কোনও উপায় থাকে না।
Android 11-এ 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-এর প্রকারের মতোই কাজ করে।
অটোফিল এনহান্সমেন্ট
Android ১১-এ অটোফিল পরিষেবার জন্য উন্নতি করা হয়েছে।
AssistStructure.ViewNode-এ ইঙ্গিত শনাক্তকারী
ভিউয়ের প্রপার্টির উপর ভিত্তি করে ভিউয়ের জন্য সিগনেচার হ্যাশ গণনা করতে অটোফিল পরিষেবার জন্য এটি প্রায়শই উপযোগী। সিগনেচার হ্যাশ গণনা করার সময়
ভিউ হিন্ট অন্তর্ভুক্ত করা একটি বিশেষ ভালো
প্রপার্টি, তবে ফোনের লোকেলের সাথে হিন্ট স্ট্রিং
পরিবর্তিত হতে পারে। এই সমস্যার সমাধান করতে, Android 11
নতুন
getHintIdEntry()
পদ্ধতির মাধ্যমে
AssistStructure.ViewNode
এক্সপ্যান্ড করে, যা কোনও ভিউয়ের হিন্ট টেক্সটের জন্য রিসোর্স আইডেন্টিফায়ার ফিরিয়ে দেয়। এই
পদ্ধতিটি একটি লোকেল-ইন্ডিপেন্ডেন্ট ভ্যালু প্রদান করে যা আপনি সিগনেচার হ্যাশ
গণনা করতে ব্যবহার করতে পারেন।
ডেটাসেটে দেখানো ইভেন্ট
অটোফিল পরিষেবা যাতে আরও ভাল সাজেশন দিতে পারে, তার জন্য Android 11-এ এমন একটি উপায়
দেওয়া হয়েছে যার মাধ্যমে এমন পরিস্থিতি শনাক্ত করা যায় যেখানে অটোফিল পরিষেবা ডেটাসেট দেখালেও ব্যবহারকারী
তার মধ্যে থেকে কোনওটিই বেছে নেননি। Android 11-এ,
FillEventHistory
নতুন
TYPE_DATASETS_SHOWN
ইভেন্টের ধরন রিপোর্ট করে। অটোফিল পরিষেবা ব্যবহারকারীকে এক বা একাধিক ডেটাসেট দেখালে, FillEventHistory এই ধরনের ইভেন্ট লগ করে। ব্যবহারকারী প্রদত্ত অটোফিল বিকল্পগুলির মধ্যে কোনওটি বেছে নিয়েছেন কিনা তা নির্ধারণ করতে, অটোফিল পরিষেবাগুলি
আগে থেকে থাকা
TYPE_DATASET_SELECTED
ইভেন্টের সাথে একত্রে এই ইভেন্টগুলি ব্যবহার করতে পারে।
IME ইন্টিগ্রেশন
কীবোর্ড এবং অন্যান্য IME এখন ড্রপ-ডাউন মেনুর পরিবর্তে সাজেশন স্ট্রিপ বা একই ধরনের ইন্টারফেসে ইনলাইন অটোফিল সাজেশন দেখাতে পারে। পাসওয়ার্ড ও ক্রেডিট কার্ড নম্বরের মতো সংবেদনশীল তথ্য সুরক্ষিত রাখতে, ব্যবহারকারীকে সাজেশন দেখানো হয় কিন্তু ব্যবহারকারী কোনও একটি বেছে না নেওয়া পর্যন্ত IME তা জানতে পারে না। IME এবং পাসওয়ার্ড ম্যানেজার কীভাবে এই ফিচারকে সহায়তা করতে পারে সেই সম্পর্কে তথ্যের জন্য, কীবোর্ডের সাথে অটোফিল ইন্টিগ্রেট করা দেখুন।
কন্টেন্ট ক্যাপচার পরিষেবার সাথে ডেটা শেয়ার করা
Android 11 থেকে শুরু করে, আপনার অ্যাপ ডিভাইসের কন্টেন্ট ক্যাপচার পরিষেবার সাথে ডেটা শেয়ার করতে পারে। এই ক্ষমতার ফলে কোনও ডিভাইসের পক্ষে ইন-কন্টেক্সট ইন্টেলিজেন্স প্রদান করা সহজ হয়, যেমন ব্যবহারকারীর পরিবেশে বর্তমানে যে গানটি বাজছে তার নাম দেখানো।
আপনার অ্যাপ থেকে ডেটা কন্টেন্ট ক্যাপচার পরিষেবায় উপলভ্য করতে, ContentCaptureManager-এর ইনস্ট্যান্সে
shareData()
মেথড কল করুন। সিস্টেম ডেটা শেয়ার করার অনুরোধ গ্রহণ করলে, কন্টেন্ট ক্যাপচার পরিষেবার সাথে শেয়ার করার জন্য আপনার অ্যাপ একটি রাইট-অনলি ফাইল ডেসক্রিপটর
পায়।