বৈশিষ্ট্য এবং APIs ওভারভিউ

অ্যান্ড্রয়েড ১১ ডেভেলপারদের জন্য দুর্দান্ত নতুন বৈশিষ্ট্য এবং API চালু করেছে। নীচের বিভাগগুলি আপনাকে আপনার অ্যাপের বৈশিষ্ট্যগুলি সম্পর্কে জানতে এবং সম্পর্কিত API গুলি দিয়ে শুরু করতে সহায়তা করে।

নতুন, পরিবর্তিত এবং সরানো API গুলির বিস্তারিত তালিকার জন্য, API diff রিপোর্টটি পড়ুন। নতুন API গুলির বিস্তারিত জানতে Android API রেফারেন্সটি দেখুন — দৃশ্যমানতার জন্য নতুন API গুলি হাইলাইট করা হয়েছে। এছাড়াও, প্ল্যাটফর্ম পরিবর্তনগুলি আপনার অ্যাপগুলিকে কোথায় প্রভাবিত করতে পারে সে সম্পর্কে জানতে, Android R এবং সমস্ত অ্যাপকে লক্ষ্য করে এমন অ্যাপগুলির জন্য Android 11 আচরণ পরিবর্তনগুলি, সেইসাথে গোপনীয়তা পরিবর্তনগুলি পরীক্ষা করে দেখতে ভুলবেন না।

নতুন অভিজ্ঞতা

ডিভাইস নিয়ন্ত্রণ

Android 11-এ একটি নতুন ControlsProviderService API অন্তর্ভুক্ত করা হয়েছে যা আপনি সংযুক্ত, বহিরাগত ডিভাইসের জন্য নিয়ন্ত্রণগুলি প্রকাশ করতে ব্যবহার করতে পারেন। এই নিয়ন্ত্রণগুলি Android পাওয়ার মেনুতে ডিভাইস নিয়ন্ত্রণের অধীনে প্রদর্শিত হয়। আরও তথ্যের জন্য, বহিরাগত ডিভাইসগুলি নিয়ন্ত্রণ করুন দেখুন।

মিডিয়া নিয়ন্ত্রণ

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

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

আরও তথ্যের জন্য, মিডিয়া নিয়ন্ত্রণ দেখুন।

স্ক্রিন

জলপ্রপাত প্রদর্শনের জন্য আরও ভালো সমর্থন

অ্যান্ড্রয়েড ১১ ওয়াটারফল ডিসপ্লে সমর্থন করার জন্য বেশ কয়েকটি API প্রদান করে, যা ডিভাইসের প্রান্তের চারপাশে মোড়ানো ডিসপ্লে। এই ডিসপ্লেগুলিকে ডিসপ্লে কাটআউট সহ ডিসপ্লের একটি রূপ হিসাবে বিবেচনা করা হয়। বিদ্যমান DisplayCutout .getSafeInset…() পদ্ধতিগুলি এখন ওয়াটারফল এরিয়া এবং কাটআউট এড়াতে সেফ ইনসেট ফিরিয়ে দেয়। ওয়াটারফল এরিয়াতে আপনার অ্যাপের কন্টেন্ট রেন্ডার করতে, নিম্নলিখিতগুলি করুন:

  • জলপ্রপাতের ইনসেটের সঠিক মাত্রা জানতে DisplayCutout.getWaterfallInsets() এ কল করুন।

  • উইন্ডো লেআউট অ্যাট্রিবিউট layoutInDisplayCutoutMode কে LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS এ সেট করুন যাতে উইন্ডোটি স্ক্রিনের সমস্ত প্রান্তে কাটআউট এবং জলপ্রপাত এলাকায় প্রসারিত হতে পারে। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কাটআউট বা জলপ্রপাত এলাকায় কোনও গুরুত্বপূর্ণ বিষয়বস্তু নেই।

হিঞ্জ অ্যাঙ্গেল সেন্সর এবং ফোল্ডেবল

অ্যান্ড্রয়েড ১১, হিঞ্জ-ভিত্তিক স্ক্রিন কনফিগারেশনযুক্ত ডিভাইসগুলিতে চলমান অ্যাপগুলিকে TYPE_HINGE_ANGLE সহ একটি নতুন সেন্সর এবং একটি নতুন SensorEvent প্রদান করে হিঞ্জের কোণ নির্ধারণ করা সম্ভব করে তোলে যা হিঞ্জের কোণ পর্যবেক্ষণ করতে পারে এবং ডিভাইসের দুটি অবিচ্ছেদ্য অংশের মধ্যে ডিগ্রী পরিমাপ প্রদান করে। ব্যবহারকারী যখন ডিভাইসটি পরিচালনা করে তখন আপনি এই কাঁচা পরিমাপগুলি গ্রানুলার অ্যানিমেশন সম্পাদন করতে ব্যবহার করতে পারেন।

ফোল্ডেবল দেখুন।

কথোপকথন

কথোপকথনের উন্নতি

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

কথোপকথন এবং আপনার অ্যাপ কীভাবে সেগুলিকে সমর্থন করতে পারে সে সম্পর্কে আরও তথ্যের জন্য, মানুষ এবং কথোপকথন দেখুন।

চ্যাট বাবলস

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

যদি কোনও অ্যাপ অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার উচ্চতর ভার্সনকে টার্গেট করে, তাহলে তার বিজ্ঞপ্তিগুলি বুদবুদ হিসাবে উপস্থাপন করা হবে না যদি না তারা নতুন কথোপকথনের প্রয়োজনীয়তা পূরণ করে। বিশেষ করে, বিজ্ঞপ্তিটি অবশ্যই একটি শর্টকাটের সাথে যুক্ত থাকতে হবে।

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

বাবল পারফরম্যান্সে বেশ কিছু উন্নতি হয়েছে এবং ব্যবহারকারীরা প্রতিটি অ্যাপ থেকে বাবল সক্রিয় এবং নিষ্ক্রিয় করার ক্ষেত্রে আরও নমনীয়তা অর্জন করেছেন। পরীক্ষামূলক সহায়তা বাস্তবায়নকারী ডেভেলপারদের জন্য, Android 11-এর API-তে কিছু পরিবর্তন রয়েছে:

5G ভিজ্যুয়াল সূচক

ব্যবহারকারীদের ডিভাইসে 5G সূচক প্রদর্শনের তথ্যের জন্য, আপনার ব্যবহারকারীদের 5G ব্যবহার করার সময় বলুন দেখুন।

গোপনীয়তা

ব্যবহারকারীর গোপনীয়তা বাড়ানোর জন্য অ্যান্ড্রয়েড ১১ অনেক পরিবর্তন এবং বিধিনিষেধ প্রবর্তন করেছে। আরও জানতে, গোপনীয়তা পৃষ্ঠাটি দেখুন।

নিরাপত্তা

বায়োমেট্রিক প্রমাণীকরণ আপডেট

আপনার অ্যাপের ডেটার নিরাপত্তার স্তর নিয়ন্ত্রণে সাহায্য করার জন্য, Android 11 বায়োমেট্রিক প্রমাণীকরণে বেশ কিছু উন্নতি প্রদান করে। এই পরিবর্তনগুলি Jetpack বায়োমেট্রিক লাইব্রেরিতেও দেখা যায়।

প্রমাণীকরণের ধরণ

অ্যান্ড্রয়েড ১১ BiometricManager.Authenticators ইন্টারফেস চালু করেছে, যা ব্যবহার করে আপনি আপনার অ্যাপ যে ধরণের প্রমাণীকরণ সমর্থন করে তা ঘোষণা করতে পারেন

কোন প্রমাণীকরণের ধরণ ব্যবহার করা হয়েছে তা নির্ধারণ করুন

ব্যবহারকারী প্রমাণীকরণের পরে, আপনি getAuthenticationType() কল করে পরীক্ষা করতে পারেন যে ব্যবহারকারী ডিভাইস শংসাপত্র ব্যবহার করে প্রমাণীকরণ করেছেন নাকি বায়োমেট্রিক শংসাপত্র ব্যবহার করে।

ব্যবহারের জন্য অনুমোদন কীগুলির জন্য অতিরিক্ত সমর্থন

অ্যান্ড্রয়েড ১১ ব্যবহার-প্রতি-ব্যবহার কী ব্যবহার করে প্রমাণীকরণের জন্য আরও সহায়তা প্রদান করে।

অবচিত পদ্ধতি

অ্যান্ড্রয়েড ১১ নিম্নলিখিত পদ্ধতিগুলিকে অবমূল্যায়ন করে:

  • setDeviceCredentialAllowed() পদ্ধতি।
  • setUserAuthenticationValidityDurationSeconds() পদ্ধতি।
  • canAuthenticate() এর ওভারলোডেড সংস্করণ যা কোনও আর্গুমেন্ট নেয় না।

বৃহৎ ডেটাসেটের নিরাপদ ভাগাভাগি

কিছু পরিস্থিতিতে, যেমন মেশিন লার্নিং বা মিডিয়া প্লেব্যাকের ক্ষেত্রে, আপনার অ্যাপটি অন্য অ্যাপের মতো একই বৃহৎ ডেটাসেট ব্যবহার করতে চাইতে পারে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, আপনার অ্যাপ এবং অন্য অ্যাপ উভয়কেই একই ডেটাসেটের একটি পৃথক কপি ডাউনলোড করতে হবে।

নেটওয়ার্ক এবং ডিস্ক উভয় ক্ষেত্রেই ডেটা রিডানডেন্সি কমাতে সাহায্য করার জন্য, Android 11 এই বৃহৎ ডেটাসেটগুলিকে শেয়ার করা ডেটা ব্লব ব্যবহার করে ডিভাইসে ক্যাশে করার অনুমতি দেয়। ডেটাসেট শেয়ার করার বিষয়ে আরও জানতে, বৃহৎ ডেটাসেট শেয়ার করার বিষয়ে বিস্তারিত নির্দেশিকা দেখুন।

ব্যবহারকারীর শংসাপত্র ছাড়াই OTA পুনঃসূচনা করার পরে ফাইল-ভিত্তিক এনক্রিপশন সম্পাদন করুন

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

কর্মক্ষমতা এবং মান

ওয়্যারলেস ডিবাগিং

Android 11 আপনার ওয়ার্কস্টেশন থেকে Android Debug Bridge (adb) এর মাধ্যমে ওয়্যারলেসভাবে আপনার অ্যাপ স্থাপন এবং ডিবাগিং সমর্থন করে। উদাহরণস্বরূপ, আপনি USB এর মাধ্যমে আপনার ডিভাইসটি শারীরিকভাবে সংযুক্ত না করে এবং ড্রাইভার ইনস্টলেশনের মতো সাধারণ USB সংযোগ সমস্যার সাথে লড়াই না করেই আপনার ডিবাগযোগ্য অ্যাপটি একাধিক দূরবর্তী ডিভাইসে স্থাপন করতে পারেন। আরও তথ্যের জন্য, হার্ডওয়্যার ডিভাইসে অ্যাপ চালান দেখুন।

ADB ইনক্রিমেন্টাল APK ইনস্টলেশন

একটি ডিভাইসে বড় (২ জিবি+) APK ইনস্টল করতে অনেক সময় লাগতে পারে, এমনকি যদি কোনও অ্যাপে সামান্য পরিবর্তনও করা হয়। ADB (Android Debug Bridge) ইনক্রিমেন্টাল APK ইনস্টলেশন এই প্রক্রিয়াটিকে ত্বরান্বিত করে, যাতে পর্যাপ্ত APK ইনস্টল করে অ্যাপটি চালু করা যায় এবং অবশিষ্ট ডেটা ব্যাকগ্রাউন্ডে স্ট্রিম করা যায়। adb install এই বৈশিষ্ট্যটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে যদি এটি ডিভাইস দ্বারা সমর্থিত হয় এবং আপনার কাছে সর্বশেষ SDK Platform-Tools ইনস্টল করা থাকে। যদি এটি সমর্থিত না হয়, তাহলে ডিফল্ট ইনস্টলেশন পদ্ধতিটি নীরবে ব্যবহার করা হয়।

বৈশিষ্ট্যটি ব্যবহার করতে নিম্নলিখিত adb কমান্ডটি ব্যবহার করুন। যদি ডিভাইসটি ক্রমবর্ধমান ইনস্টলেশন সমর্থন না করে, তাহলে কমান্ডটি ব্যর্থ হয় এবং একটি ভার্বোজ ব্যাখ্যা প্রিন্ট করে।

adb install --incremental

ADB ইনক্রিমেন্টাল APK ইনস্টল করার আগে, আপনাকে অবশ্যই আপনার APK স্বাক্ষর করতে হবে এবং একটি APK স্বাক্ষর স্কিম v4 ফাইল তৈরি করতে হবে। এই বৈশিষ্ট্যটি কাজ করার জন্য v4 স্বাক্ষর ফাইলটি APK এর পাশে রাখতে হবে।

নেটিভ মেমরি অ্যালোকেটর ব্যবহার করে ত্রুটি সনাক্তকরণ

GWP-ASan হল একটি নেটিভ মেমোরি অ্যালোকেটর বৈশিষ্ট্য যা ব্যবহার-পরবর্তী-মুক্ত এবং হিপ-বাফার-ওভারফ্লো বাগ খুঁজে পেতে সাহায্য করে। আপনি এই বৈশিষ্ট্যটি বিশ্বব্যাপী বা আপনার অ্যাপের নির্দিষ্ট সাবপ্রসেসের জন্য সক্ষম করতে পারেন। আরও জানতে, GWP-Asan নির্দেশিকাটি দেখুন।

নিউরাল নেটওয়ার্ক API 1.3

অ্যান্ড্রয়েড ১১ নিউরাল নেটওয়ার্কস এপিআই (এনএএনপিআই) প্রসারিত এবং উন্নত করে।

নতুন কার্যক্রম

NNAPI 1.3 টেনসরফ্লো লাইটের নতুন কোয়ান্টাইজেশন স্কিম সমর্থন করার জন্য একটি নতুন অপারেন্ড টাইপ, TENSOR_QUANT8_ASYMM_SIGNED প্রবর্তন করেছে।

অতিরিক্তভাবে, NNAPI 1.3 নিম্নলিখিত নতুন ক্রিয়াকলাপগুলি প্রবর্তন করে:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

নতুন ML নিয়ন্ত্রণ

মেশিন লার্নিং সুচারুভাবে পরিচালনা করতে NNAPI 1.3 নতুন নিয়ন্ত্রণ প্রবর্তন করেছে:

এনডিকে থার্মাল এপিআই

যখন ডিভাইসগুলি খুব বেশি গরম হয়ে যায়, তখন তারা CPU এবং/অথবা GPU কে ​​থ্রোটল করতে পারে এবং এটি অপ্রত্যাশিতভাবে অ্যাপগুলিকে প্রভাবিত করতে পারে। যেসব অ্যাপ বা গেমে জটিল গ্রাফিক্স, ভারী গণনা, বা টেকসই নেটওয়ার্ক কার্যকলাপ থাকে, সেগুলিতে সমস্যার সম্মুখীন হওয়ার সম্ভাবনা বেশি থাকে।

ডিভাইসের তাপমাত্রার পরিবর্তন পর্যবেক্ষণ করতে Android 11-এ NDK Thermal API ব্যবহার করুন, এবং তারপর কম বিদ্যুৎ ব্যবহার এবং ডিভাইসের তাপমাত্রা ঠান্ডা রাখার জন্য পদক্ষেপ নিন। এই APIটি Java Thermal API-এর অনুরূপ; আপনি যেকোনো তাপীয় অবস্থার পরিবর্তনের জন্য বিজ্ঞপ্তি পেতে বা সরাসরি বর্তমান অবস্থা পোল করতে এটি ব্যবহার করতে পারেন।

টেক্সট এবং ইনপুট

উন্নত IME ট্রানজিশন

অ্যান্ড্রয়েড ১১ ইনপুট মেথড এডিটর (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() কল করে উইন্ডো ইনসেট পরিবর্তনের জন্য একটি নতুন লিসেনার সেট করুন:

কোটলিন

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 প্যাকেজ আপডেট করেছে। নতুন লাইব্রেরি সংস্করণে আপডেট করা CLDR লোকেল ডেটা এবং অ্যান্ড্রয়েডে আন্তর্জাতিকীকরণ সমর্থনে বেশ কিছু উন্নতি অন্তর্ভুক্ত রয়েছে।

নতুন লাইব্রেরি সংস্করণগুলিতে উল্লেখযোগ্য পরিবর্তনগুলির মধ্যে রয়েছে:

  • অনেক ফর্ম্যাটিং API এখন একটি নতুন রিটার্ন অবজেক্ট টাইপ সমর্থন করে যা FormattedValue প্রসারিত করে।
  • LocaleMatcher API-তে একটি বিল্ডার ক্লাস, java.util.Locale টাইপের জন্য সমর্থন এবং একটি মিল সম্পর্কে অতিরিক্ত ডেটা সমন্বিত একটি ফলাফল ক্লাস রয়েছে।
  • ইউনিকোড ১৩ এখন সমর্থিত।

মিডিয়া

মিডিয়াকোডেক বাফার বরাদ্দ করা হচ্ছে

অ্যান্ড্রয়েড ১১-এ একটি নতুন MediaCodec এপিআই অন্তর্ভুক্ত করা হয়েছে যা ইনপুট এবং আউটপুট বাফার বরাদ্দ করার সময় অ্যাপগুলিকে আরও নিয়ন্ত্রণ দেয়। এটি আপনার অ্যাপকে আরও দক্ষতার সাথে মেমরি পরিচালনা করতে দেয়।

নতুন ক্লাস:
নতুন পদ্ধতি:

এছাড়াও, MediaCodec.Callback() এর দুটি পদ্ধতির আচরণ পরিবর্তিত হয়েছে:

onInputBufferAvailable()
যদি ব্লক মডেল API ব্যবহারের জন্য কনফিগার করা থাকে, তাহলে ইনডেক্সের সাথে MediaCodec.getInputBuffer() এবং MediaCodec.queueInputBuffer() কল করার পরিবর্তে, অ্যাপগুলিকে ইনডেক্সের সাথে MediaCodec.getQueueRequest ব্যবহার করা উচিত, স্লটে একটি LinearBlock/HardwareBuffer সংযুক্ত করা উচিত।
onOutputBufferAvailable()
ইনডেক্সের সাথে MediaCodec.getOutputBuffer() কল করার পরিবর্তে, অ্যাপগুলি আরও তথ্য এবং LinearBlock/HardwareBuffer বাফার সহ OutputFrame অবজেক্ট পেতে সূচকের সাথে MediaCodec.getOutputFrame() ব্যবহার করতে পারে।

মিডিয়াকোডেকে কম-বিলম্বিত ডিকোডিং

অ্যান্ড্রয়েড ১১ গেম এবং অন্যান্য রিয়েল-টাইম অ্যাপের জন্য কম-বিলম্বিত ডিকোডিং সমর্থন করার জন্য MediaCodec উন্নত করে। আপনি FEATURE_LowLatency MediaCodecInfo.CodecCapabilities.isFeatureSupported() এ পাস করে একটি কোডেক কম-বিলম্বিত ডিকোডিং সমর্থন করে কিনা তা পরীক্ষা করতে পারেন।

কম-বিলম্বিত ডিকোডিং চালু বা বন্ধ করতে, নিম্নলিখিতগুলির যেকোনো একটি করুন:

নতুন AAudio ফাংশন AAudioStream_release()

AAudioStream_close() ফাংশনটি একই সাথে একটি অডিও স্ট্রিম রিলিজ এবং বন্ধ করে। এটি বিপজ্জনক হতে পারে। যদি অন্য কোনও প্রক্রিয়া স্ট্রিমটি বন্ধ করার পরে অ্যাক্সেস করার চেষ্টা করে, তাহলে প্রক্রিয়াটি ক্র্যাশ হয়ে যাবে।

নতুন ফাংশন AAudioStream_release() স্ট্রিমটি রিলিজ করে কিন্তু বন্ধ করে না। এটি এর রিসোর্সগুলি মুক্ত করে এবং স্ট্রিমটিকে একটি পরিচিত অবস্থায় রাখে। অবজেক্টটি ততক্ষণ পর্যন্ত টিকে থাকে যতক্ষণ না আপনি AAudioStream_close() কল করেন।

মিডিয়াপার্সার এপিআই

মিডিয়াপার্সার হল মিডিয়া এক্সট্রাকশনের জন্য একটি নতুন নিম্ন স্তরের API। এটি মিডিয়াএক্সট্র্যাক্টরের চেয়ে বেশি নমনীয় এবং মিডিয়া এক্সট্রাকশন কার্যকারিতার উপর অতিরিক্ত নিয়ন্ত্রণ প্রদান করে।

একটি USB ডিভাইস থেকে অডিও ক্যাপচার

যখন RECORD_AUDIO অনুমতি ছাড়া কোনও অ্যাপ্লিকেশন UsbManager ব্যবহার করে অডিও ক্যাপচার ক্ষমতা সম্পন্ন USB অডিও ডিভাইসে (যেমন একটি USB হেডসেট) সরাসরি অ্যাক্সেসের অনুরোধ করে, তখন একটি নতুন সতর্কতা বার্তা উপস্থিত হয় যা ব্যবহারকারীকে ডিভাইসটি ব্যবহারের অনুমতি নিশ্চিত করতে বলে। সিস্টেমটি যেকোনো "সর্বদা ব্যবহার করুন" বিকল্প উপেক্ষা করে, তাই ব্যবহারকারীকে সতর্কতা স্বীকার করতে হবে এবং প্রতিবার কোনও অ্যাপ অ্যাক্সেসের অনুরোধ করার সময় অনুমতি দিতে হবে।

এই আচরণ এড়াতে, আপনার অ্যাপের RECORD_AUDIO অনুমতির অনুরোধ করা উচিত।

সমসাময়িক মাইক অ্যাক্সেস

অ্যান্ড্রয়েড ১১ AudioRecord , MediaRecorder এবং AAudioStream API গুলিতে নতুন পদ্ধতি যুক্ত করেছে। এই পদ্ধতিগুলি নির্বাচিত ব্যবহারের ক্ষেত্রে নির্বিশেষে একই সাথে ক্যাপচার করার ক্ষমতা সক্ষম এবং অক্ষম করে। অডিও ইনপুট ভাগ করে নেওয়া দেখুন।

আউটপুট সুইচার

অ্যান্ড্রয়েড ১১ কাস্ট এবং মিডিয়ারাউটার এপিআই ব্যবহার করে এমন অ্যাপগুলির জন্য নতুন আচরণ প্রয়োগ করে।

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

সংযোগ

ওয়াই-ফাই পাসপয়েন্ট বর্ধিতকরণ

অ্যান্ড্রয়েড ১১-এ যোগ করা পাসপয়েন্ট ক্ষমতা সম্পর্কে তথ্যের জন্য, পাসপয়েন্ট দেখুন।

ওয়াই-ফাই সাজেশন এপিআই প্রসারিত করা হয়েছে

অ্যান্ড্রয়েড ১১ আপনার অ্যাপের নেটওয়ার্ক পরিচালনার ক্ষমতা বাড়ানোর জন্য Wi-Fi সাজেশন API প্রসারিত করে, যার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • সংযোগ ব্যবস্থাপনা অ্যাপগুলি সংযোগ বিচ্ছিন্ন করার অনুরোধের অনুমতি দিয়ে তাদের নিজস্ব নেটওয়ার্ক পরিচালনা করতে পারে।
  • পাসপয়েন্ট নেটওয়ার্কগুলি সাজেশন API-তে একত্রিত করা হয় এবং ব্যবহারকারীকে পরামর্শ দেওয়া যেতে পারে।
  • অ্যানালিটিক্স এপিআই আপনাকে আপনার নেটওয়ার্কের মান সম্পর্কে তথ্য পেতে সক্ষম করে।

কলস্ক্রিনিং সার্ভিসের আপডেট

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, একটি কলস্ক্রিনিং সার্ভিস ইনকামিং কলের জন্য STIR/SHAKEN যাচাইকরণের স্থিতি (verstat) সম্পর্কে তথ্য অনুরোধ করতে পারে। এই তথ্য ইনকামিং কলের কল বিবরণের অংশ হিসাবে সরবরাহ করা হয়।

যদি কোনও CallScreeningService READ_CONTACTS অনুমতি ধারণ করে, তাহলে ব্যবহারকারীর পরিচিতিতে থাকা কোনও নম্বর থেকে ইনকামিং কল বা আউটগোয়িং কল এলে অ্যাপটি অবহিত হয়।

আরও তথ্যের জন্য, কলার আইডি স্পুফিং প্রতিরোধ করুন দেখুন।

ওপেন মোবাইল এপিআই আপডেট

অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণে OMAPI সাপোর্ট সম্পর্কে তথ্যের জন্য, ওপেন মোবাইল এপিআই রিডার সাপোর্ট দেখুন।

পারফর্ম্যান্ট ভিপিএন

যেসব অ্যাপ API লেভেল 30 এবং তার উপরে লক্ষ্য করে অথবা API লেভেল 29 এবং তার উপরে চালু হওয়া ডিভাইসে চলছে, তারা ব্যবহারকারী-কনফিগার করা এবং অ্যাপ-ভিত্তিক উভয় VPN-এর জন্য VPN-তে IKEv2/IPsec প্রয়োগ করতে পারে।

VPN গুলি অপারেটিং সিস্টেমের নেটিভ সংস্করণে চলে, যা একটি অ্যাপে IKEv2/IPsec VPN সংযোগ স্থাপনের জন্য প্রয়োজনীয় কোডকে সহজ করে তোলে।

প্রতি-প্রক্রিয়া নেটওয়ার্ক অ্যাক্সেস নিয়ন্ত্রণ

প্রতি-প্রক্রিয়ার ভিত্তিতে নেটওয়ার্ক অ্যাক্সেস সক্ষম করার তথ্যের জন্য, নেটওয়ার্ক ব্যবহার পরিচালনা করুন দেখুন।

একই FQDN দিয়ে একাধিক ইনস্টল করা পাসপয়েন্ট কনফিগারেশনের অনুমতি দিন

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, আপনি PasspointConfiguration.getUniqueId() ব্যবহার করে একটি PasspointConfiguration অবজেক্টের জন্য একটি অনন্য শনাক্তকারী পেতে পারেন, যা আপনার অ্যাপের ব্যবহারকারীদের একই সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেন নাম (FQDN) সহ একাধিক প্রোফাইল ইনস্টল করতে সক্ষম করে।

এই কার্যকারিতাটি তখন সহায়ক যখন কোনও ক্যারিয়ার তাদের নেটওয়ার্কে মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC) এর একাধিক সংমিশ্রণ স্থাপন করে, কিন্তু শুধুমাত্র একটি FQDN থাকে। Android 11 এবং উচ্চতর সংস্করণে, একই FQDN সহ একাধিক প্রোফাইল ইনস্টল করা সম্ভব যা হোম প্রদানকারীর নেটওয়ার্কের সাথে মেলে যখন ব্যবহারকারী MCC বা MNC সহ একটি সিম ইনস্টল করেন।

GNSS অ্যান্টেনা সাপোর্ট

অ্যান্ড্রয়েড ১১ GnssAntennaInfo ক্লাস চালু করেছে, যা আপনার অ্যাপের জন্য গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) যে সেন্টিমিটার-নির্ভুলতা পজিশনিং প্রদান করতে পারে তার আরও বেশি ব্যবহার করা সম্ভব করে তোলে।

অ্যান্টেনা ক্যালিব্রেশন তথ্যের নির্দেশিকাটিতে আরও জানুন।

গ্রাফিক্স

NDK ইমেজ ডিকোডার

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

ফ্রেম রেট API

অ্যান্ড্রয়েড ১১ এমন একটি 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>

ছবি এবং ক্যামেরা

সক্রিয় ক্যাপচারের সময় বিজ্ঞপ্তির শব্দ এবং কম্পন মিউট করুন

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, সক্রিয়ভাবে ক্যামেরা ব্যবহার করার সময়, আপনার অ্যাপটি শুধুমাত্র কম্পন, শব্দ এবং কম্পন উভয়ই নিঃশব্দ করতে পারে, অথবা setCameraAudioRestriction() ব্যবহার করেও নয়।

অ্যান্ড্রয়েড এমুলেটরে বর্ধিত ক্যামেরা সমর্থন

অ্যান্ড্রয়েড ১১ থেকে শুরু করে এমুলেটরে ক্যামেরার জন্য বর্ধিত সমর্থন সম্পর্কে তথ্যের জন্য, ক্যামেরা সমর্থন দেখুন।

একাধিক ক্যামেরার একযোগে ব্যবহারের জন্য সমর্থন

অ্যান্ড্রয়েড ১১ একসাথে একাধিক ক্যামেরা ব্যবহারের জন্য সাপোর্ট অনুসন্ধানের জন্য API যোগ করে, যার মধ্যে সামনের এবং পিছনের ক্যামেরা উভয়ই অন্তর্ভুক্ত।

আপনার অ্যাপটি যে ডিভাইসে চলছে তাতে সমর্থন আছে কিনা তা পরীক্ষা করতে, নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:

  • getConcurrentCameraIds() ক্যামেরা আইডির সংমিশ্রণের একটি Set প্রদান করে যা একই অ্যাপ্লিকেশন প্রক্রিয়া দ্বারা কনফিগার করা হলে গ্যারান্টিযুক্ত স্ট্রিম সংমিশ্রণের সাথে একই সাথে স্ট্রিম করতে পারে।
  • isConcurrentSessionConfigurationSupported() জিজ্ঞাসা করে যে ক্যামেরা ডিভাইসগুলি একই সাথে সংশ্লিষ্ট সেশন কনফিগারেশনগুলিকে সমর্থন করতে পারে কিনা।

একাধিক ফ্রেম সহ HEIF ছবির জন্য আরও ভালো সমর্থন

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, যদি আপনি ImageDecoder.decodeDrawable() কল করেন এবং ফ্রেমের ক্রম (যেমন একটি অ্যানিমেশন বা একটি বার্স্ট ফটো) ধারণকারী একটি HEIF চিত্র পাস করেন, তাহলে পদ্ধতিটি সম্পূর্ণ চিত্র ক্রম ধারণকারী একটি AnimatedImageDrawable প্রদান করে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, পদ্ধতিটি কেবল একটি ফ্রেমের একটি BitmapDrawable প্রদান করে।

যদি HEIF গ্রাফিকে একাধিক ফ্রেম থাকে যা একই ক্রমানুসারে নেই, তাহলে আপনি MediaMetadataRetriever.getImageAtIndex() কল করে একটি পৃথক ফ্রেম পুনরুদ্ধার করতে পারেন।

অ্যাক্সেসযোগ্যতা

অ্যাক্সেসিবিলিটি পরিষেবা ডেভেলপারদের জন্য আপডেট

আপনি যদি একটি কাস্টম অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করেন, তাহলে আপনি Android 11-এ নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:

  • অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারী-মুখী ব্যাখ্যা এখন প্লেইন টেক্সটের পাশাপাশি HTML এবং চিত্রেরও সুযোগ করে দেয়। এই নমনীয়তা শেষ ব্যবহারকারীদের কাছে আপনার পরিষেবা কী করে এবং এটি কীভাবে তাদের সাহায্য করতে পারে তা ব্যাখ্যা করা সহজ করে তোলে।
  • contentDescription এর চেয়ে শব্দার্থগতভাবে অর্থপূর্ণ একটি UI উপাদানের বর্ণনা নিয়ে কাজ করতে, getStateDescription() পদ্ধতিটি কল করুন।
  • টাচ ইভেন্টগুলিকে সিস্টেমের টাচ এক্সপ্লোরারকে বাইপাস করার অনুরোধ করতে, setTouchExplorationPassthroughRegion() কল করুন। একইভাবে, সিস্টেমের জেসচার ডিটেক্টরকে বাইপাস করার অনুরোধ করতে, setGestureDetectionPassthroughRegion() কল করুন।
  • আপনি IME অ্যাকশনের জন্য অনুরোধ করতে পারেন, যেমন "এন্টার" এবং "পরবর্তী", এবং সেই সাথে FLAG_SECURE ফ্ল্যাগ সক্ষম করে না এমন উইন্ডোর স্ক্রিনশটও নিতে পারেন।

অতিরিক্ত বৈশিষ্ট্য

অ্যাপ প্রক্রিয়া থেকে বেরিয়ে আসার কারণ

Android 11 ActivityManager.getHistoricalProcessExitReasons() পদ্ধতি চালু করেছে, যা সাম্প্রতিক কোনও প্রক্রিয়া বন্ধের কারণগুলি রিপোর্ট করে। অ্যাপগুলি ক্র্যাশ ডায়াগনস্টিক তথ্য সংগ্রহ করতে এই পদ্ধতিটি ব্যবহার করতে পারে, যেমন ANR, মেমরি সমস্যা বা অন্যান্য কারণে কোনও প্রক্রিয়া বন্ধ করা হয়েছে কিনা। অতিরিক্তভাবে, আপনি পরবর্তী বিশ্লেষণের জন্য কাস্টম স্টেট তথ্য সংরক্ষণ করতে নতুন setProcessStateSummary() পদ্ধতি ব্যবহার করতে পারেন।

getHistoricalProcessExitReasons() পদ্ধতিটি ApplicationExitInfo ক্লাসের ইনস্ট্যান্স ফেরত পাঠায়, যেখানে একটি অ্যাপ প্রসেসের ডেথ সম্পর্কিত তথ্য থাকে। এই ক্লাসের একটি ইনস্ট্যান্সে getReason() কল করে, আপনি নির্ধারণ করতে পারেন কেন আপনার অ্যাপের প্রসেসটি বন্ধ করা হয়েছে। উদাহরণস্বরূপ, REASON_CRASH এর রিটার্ন মান নির্দেশ করে যে আপনার অ্যাপে একটি অ-পরিচালিত ব্যতিক্রম ঘটেছে। যদি আপনার অ্যাপকে এক্সিট ইভেন্টের জন্য স্বতন্ত্রতা নিশ্চিত করতে হয়, তাহলে এটি একটি অ্যাপ-নির্দিষ্ট শনাক্তকারী বজায় রাখতে পারে, যেমন getTimestamp() পদ্ধতির টাইমস্ট্যাম্পের উপর ভিত্তি করে একটি হ্যাশ মান।

অতিরিক্ত সম্পদ

আরও তথ্যের জন্য, মিডিয়ামে অ্যাপগুলিকে আরও ব্যক্তিগত এবং স্থিতিশীল করার জন্য নতুন অ্যান্ড্রয়েড ১১ টুল সম্পর্কে নিবন্ধটি পড়ুন।

রিসোর্স লোডার

অ্যান্ড্রয়েড ১১ একটি নতুন API প্রবর্তন করেছে যা অ্যাপগুলিকে রিসোর্স অনুসন্ধান এবং লোড করার পদ্ধতি গতিশীলভাবে প্রসারিত করতে দেয়। নতুন API ক্লাস ResourcesLoader এবং ResourcesProvider মূলত নতুন কার্যকারিতা প্রদানের জন্য দায়ী। একসাথে, তারা অতিরিক্ত রিসোর্স এবং সম্পদ সরবরাহ করার ক্ষমতা প্রদান করে, অথবা বিদ্যমান রিসোর্স এবং সম্পদের মান পরিবর্তন করে।

ResourcesLoader অবজেক্ট হলো এমন কন্টেইনার যা একটি অ্যাপের Resources ইনস্ট্যান্সে ResourcesProvider অবজেক্ট সরবরাহ করে। পরিবর্তে, ResourcesProvider অবজেক্টগুলি APK এবং রিসোর্স টেবিল থেকে রিসোর্স ডেটা লোড করার পদ্ধতি প্রদান করে।

এই API-এর একটি প্রাথমিক ব্যবহারের ক্ষেত্রে হল কাস্টম অ্যাসেট লোডিং। আপনি loadFromDirectory() ব্যবহার করে একটি ResourcesProvider তৈরি করতে পারেন যা ফাইল-ভিত্তিক রিসোর্স এবং অ্যাসেটের রেজোলিউশন পুনঃনির্দেশিত করে, যার ফলে এটি অ্যাপ্লিকেশন APK-এর পরিবর্তে একটি নির্দিষ্ট ডিরেক্টরি অনুসন্ধান করে। আপনি AssetManager API ক্লাস থেকে open() পদ্ধতির পরিবারের মাধ্যমে এই সম্পদগুলি অ্যাক্সেস করতে পারেন, ঠিক যেমন APK-তে বান্ডিল করা অ্যাসেটের ক্ষেত্রে।

APK স্বাক্ষর স্কিম v4

অ্যান্ড্রয়েড ১১ APK সিগনেচার স্কিম v4 এর জন্য সমর্থন যোগ করে। এই স্কিমটি একটি পৃথক ফাইলে ( apk-name .apk.idsig ) একটি নতুন ধরণের স্বাক্ষর তৈরি করে তবে অন্যথায় এটি v2 এবং v3 এর মতো। APK তে কোনও পরিবর্তন করা হয় না। এই স্কিমটি ADB ইনক্রিমেন্টাল APK ইনস্টলেশন সমর্থন করে, যা APK ইনস্টলেশনের গতি বাড়ায়।

ডায়নামিক ইন্টেন্ট ফিল্টার

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

অ্যান্ড্রয়েড ১১ 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-এ ইঙ্গিত শনাক্তকারী

ভিউয়ের বৈশিষ্ট্যের উপর ভিত্তি করে একটি ভিউয়ের জন্য একটি স্বাক্ষর হ্যাশ গণনা করা অটোফিল পরিষেবাগুলির জন্য প্রায়শই কার্যকর। একটি স্বাক্ষর হ্যাশ গণনা করার সময় ভিউ ইঙ্গিতটি অন্তর্ভুক্ত করার জন্য একটি বিশেষভাবে ভাল বৈশিষ্ট্য, তবে ফোনের লোকেলের সাথে ইঙ্গিত স্ট্রিং পরিবর্তিত হতে পারে। এই সমস্যা সমাধানের জন্য, Android 11 একটি নতুন getHintIdEntry() পদ্ধতি ব্যবহার করে AssistStructure.ViewNode প্রসারিত করে, যা একটি ভিউয়ের ইঙ্গিত পাঠ্যের জন্য রিসোর্স শনাক্তকারী প্রদান করে। এই পদ্ধতিটি একটি স্থানীয়-স্বতন্ত্র মান প্রদান করে যা আপনি স্বাক্ষর হ্যাশ গণনা করতে ব্যবহার করতে পারেন।

ডেটাসেটগুলিতে ইভেন্ট দেখানো হয়েছে

অটোফিল পরিষেবাগুলিকে তাদের পরামর্শ উন্নত করতে সাহায্য করার জন্য, Android 11 এমন একটি উপায় প্রদান করে যেখানে একটি অটোফিল পরিষেবা ডেটাসেট উপস্থাপন করে কিন্তু ব্যবহারকারী তাদের কোনওটিই নির্বাচন করেনি। Android 11-এ, FillEventHistory একটি নতুন TYPE_DATASETS_SHOWN ইভেন্ট টাইপ রিপোর্ট করে। যখনই অটোফিল পরিষেবা ব্যবহারকারীর কাছে এক বা একাধিক ডেটাসেট উপস্থাপন করে তখন FillEventHistory এই ধরণের একটি ইভেন্ট লগ করে। ব্যবহারকারী প্রদত্ত কোনও অটোফিল বিকল্প নির্বাচন করেছেন কিনা তা নির্ধারণ করতে অটোফিল পরিষেবাগুলি বিদ্যমান TYPE_DATASET_SELECTED ইভেন্টের সাথে এই ইভেন্টগুলি ব্যবহার করতে পারে।

IME ইন্টিগ্রেশন

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

কন্টেন্ট ক্যাপচার পরিষেবার সাথে ডেটা শেয়ারিং

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, আপনার অ্যাপটি ডিভাইসের কন্টেন্ট ক্যাপচার পরিষেবার সাথে ডেটা শেয়ার করতে পারে। এই ক্ষমতার মাধ্যমে একটি ডিভাইসের জন্য কনটেক্সট বুদ্ধিমত্তা প্রদান করা সহজ হয়, যেমন ব্যবহারকারীর পরিবেশে বর্তমানে বাজানো একটি গানের নাম দেখানো।

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