অ্যান্ড্রয়েড 11 ডেভেলপারদের জন্য দুর্দান্ত নতুন বৈশিষ্ট্য এবং এপিআই প্রবর্তন করেছে। নীচের বিভাগগুলি আপনাকে আপনার অ্যাপগুলির বৈশিষ্ট্যগুলি সম্পর্কে জানতে এবং সম্পর্কিত APIগুলির সাথে শুরু করতে সহায়তা করে৷
নতুন, পরিবর্তিত এবং সরানো API-এর বিস্তারিত তালিকার জন্য, API ডিফ রিপোর্ট পড়ুন। নতুন এপিআই সম্পর্কে বিস্তারিত জানার জন্য অ্যান্ড্রয়েড এপিআই রেফারেন্স দেখুন — নতুন এপিআইগুলি দৃশ্যমানতার জন্য হাইলাইট করা হয়েছে। এছাড়াও, প্ল্যাটফর্মের পরিবর্তনগুলি আপনার অ্যাপ্লিকেশানগুলিকে প্রভাবিত করতে পারে এমন অঞ্চলগুলি সম্পর্কে জানতে, Android R এবং সমস্ত অ্যাপ্লিকেশানগুলির পাশাপাশি গোপনীয়তার পরিবর্তনগুলিকে লক্ষ্য করে এমন অ্যাপ্লিকেশানগুলির জন্য Android 11 আচরণের পরিবর্তনগুলি পরীক্ষা করে দেখুন৷
নতুন অভিজ্ঞতা
ডিভাইস নিয়ন্ত্রণ
Android 11-এ একটি নতুন ControlsProviderService
API রয়েছে যা আপনি সংযুক্ত, বাহ্যিক ডিভাইসগুলির জন্য নিয়ন্ত্রণগুলি প্রকাশ করতে ব্যবহার করতে পারেন। এই নিয়ন্ত্রণগুলি Android পাওয়ার মেনুতে ডিভাইস নিয়ন্ত্রণের অধীনে প্রদর্শিত হয়৷ আরও তথ্যের জন্য, বাহ্যিক ডিভাইস নিয়ন্ত্রণ দেখুন।
মিডিয়া কন্ট্রোল
অ্যান্ড্রয়েড 11 মিডিয়া নিয়ন্ত্রণগুলি কীভাবে প্রদর্শিত হয় তা আপডেট করে। মিডিয়া নিয়ন্ত্রণগুলি দ্রুত সেটিংসের কাছে উপস্থিত হয়৷ একাধিক অ্যাপ্লিকেশানের সেশনগুলি একটি সোয়াইপযোগ্য ক্যারোজেলে সাজানো হয় যার মধ্যে রয়েছে ফোনে স্থানীয়ভাবে বাজানো স্ট্রীম, দূরবর্তী স্ট্রীম, যেমন বাহ্যিক ডিভাইসে সনাক্ত করা বা কাস্ট সেশনগুলি এবং আগের, পুনঃসূচনাযোগ্য সেশনগুলি যে ক্রমানুসারে সেগুলি শেষবার চালানো হয়েছিল।
ব্যবহারকারীরা অ্যাপটি শুরু না করেই ক্যারোজেল থেকে আগের সেশনগুলি পুনরায় চালু করতে পারেন। প্লেব্যাক শুরু হলে, ব্যবহারকারী মিডিয়া নিয়ন্ত্রণের সাথে স্বাভাবিক উপায়ে যোগাযোগ করে।
আরও তথ্যের জন্য, মিডিয়া নিয়ন্ত্রণ দেখুন।
পর্দা
জলপ্রপাত প্রদর্শনের জন্য আরও ভাল সমর্থন
অ্যান্ড্রয়েড 11 জলপ্রপাত প্রদর্শনকে সমর্থন করার জন্য বেশ কয়েকটি API সরবরাহ করে, ডিসপ্লে যা ডিভাইসের প্রান্তে মোড়ানো থাকে। এই ডিসপ্লেগুলিকে ডিসপ্লে কাটআউট সহ ডিসপ্লেগুলির একটি বৈকল্পিক হিসাবে বিবেচনা করা হয়। বিদ্যমান DisplayCutout
.getSafeInset…()
পদ্ধতিগুলি এখন জলপ্রপাত এলাকা এবং কাটআউটগুলি এড়াতে নিরাপদ ইনসেট ফিরিয়ে দেয়। জলপ্রপাত এলাকায় আপনার অ্যাপ সামগ্রী রেন্ডার করতে, নিম্নলিখিতগুলি করুন:
জলপ্রপাত ইনসেটের সঠিক মাত্রা পেতে
DisplayCutout.getWaterfallInsets()
এ কল করুন।উইন্ডো লেআউট বৈশিষ্ট্য
layoutInDisplayCutoutMode
কেLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
এ সেট করুন যাতে উইন্ডোটিকে পর্দার সমস্ত প্রান্তে কাটআউট এবং জলপ্রপাত অঞ্চলে প্রসারিত করার অনুমতি দেয়৷ আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কাটআউট বা জলপ্রপাত অঞ্চলে কোনও প্রয়োজনীয় সামগ্রী নেই।
কবজা কোণ সেন্সর এবং ফোল্ডেবল
Android 11 কবজা-ভিত্তিক স্ক্রিন কনফিগারেশন সহ ডিভাইসে চলমান অ্যাপগুলির জন্য TYPE_HINGE_ANGLE
সহ একটি নতুন সেন্সর এবং একটি নতুন SensorEvent
প্রদান করে কব্জাটির কোণ নির্ধারণ করা সম্ভব করে তোলে যা কব্জা কোণ নিরীক্ষণ করতে পারে এবং দুটি অবিচ্ছেদ্য মধ্যে ডিগ্রীতে একটি পরিমাপ প্রদান করে ডিভাইসের অংশ। আপনি এই কাঁচা পরিমাপগুলিকে দানাদার অ্যানিমেশনগুলি সম্পাদন করতে ব্যবহার করতে পারেন কারণ ব্যবহারকারী ডিভাইসটি পরিচালনা করে৷
Foldables দেখুন।
কথোপকথন
কথোপকথনের উন্নতি
Android 11 কথোপকথন পরিচালনা করার পদ্ধতিতে অনেক উন্নতি করে। কথোপকথন হল রিয়েল-টাইম, দুই বা ততোধিক লোকের মধ্যে দ্বিমুখী যোগাযোগ। এই কথোপকথনগুলিকে বিশেষ গুরুত্ব দেওয়া হয়, এবং ব্যবহারকারীদের কাছে তাদের সাথে কীভাবে ইন্টারঅ্যাক্ট করতে হয় সে সম্পর্কে বেশ কয়েকটি নতুন বিকল্প রয়েছে।
কথোপকথন সম্পর্কে আরও তথ্যের জন্য এবং আপনার অ্যাপ কীভাবে তাদের সমর্থন করতে পারে, মানুষ এবং কথোপকথন দেখুন।
চ্যাট বুদবুদ
বুদবুদ এখন সিস্টেম জুড়ে পৃষ্ঠ কথোপকথন সাহায্য করার জন্য বিকাশকারীদের জন্য উপলব্ধ. বুদবুদ ছিল অ্যান্ড্রয়েড 10-এ একটি পরীক্ষামূলক বৈশিষ্ট্য যা একটি বিকাশকারী বিকল্পের মাধ্যমে সক্ষম করা হয়েছিল; অ্যান্ড্রয়েড 11-এ, এটি আর প্রয়োজন নেই।
যদি কোনো অ্যাপ Android 11 (API লেভেল 30) বা উচ্চতরকে টার্গেট করে, তাহলে এর বিজ্ঞপ্তিগুলি বুদবুদ হিসাবে উপস্থাপিত হয় না যদি না তারা নতুন কথোপকথনের প্রয়োজনীয়তা পূরণ করে। বিশেষ করে, বিজ্ঞপ্তিটি অবশ্যই একটি শর্টকাটের সাথে যুক্ত হতে হবে।
অ্যান্ড্রয়েড 11-এর আগে, আপনি যদি একটি বিজ্ঞপ্তি বুদবুদ করতে চান তবে আপনাকে স্পষ্টভাবে উল্লেখ করতে হবে যে বিজ্ঞপ্তিটি সর্বদা নথি UI মোডে লঞ্চ করার জন্য সেট করা হয়েছিল। অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, আপনাকে আর স্পষ্টভাবে সেই সেটিং করতে হবে না; বিজ্ঞপ্তিটি বুদবুদ করা হলে, প্ল্যাটফর্ম স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তিটিকে সর্বদা নথি UI মোডে চালু করার জন্য সেট করে।
বুদবুদের কর্মক্ষমতার জন্য অনেকগুলি উন্নতি রয়েছে এবং ব্যবহারকারীদের প্রতিটি অ্যাপ থেকে বুদবুদ সক্রিয় এবং নিষ্ক্রিয় করার ক্ষেত্রে আরও নমনীয়তা রয়েছে৷ যেসব ডেভেলপাররা পরীক্ষামূলক সহায়তা বাস্তবায়ন করেছেন, তাদের জন্য Android 11-এ API-তে কিছু পরিবর্তন রয়েছে:
- কোন প্যারামিটার ছাড়া
BubbleMetadata.Builder()
কনস্ট্রাক্টরকে অবহেলিত করা হয়েছে। পরিবর্তে,BubbleMetadata.Builder(PendingIntent, Icon)
অথবাBubbleMetadata.Builder(String)
দুটি নতুন কনস্ট্রাক্টর যেকোন একটি ব্যবহার করুন। -
BubbleMetadata.Builder(String)
কল করে একটি শর্টকাট আইডি থেকেBubbleMetadata
তৈরি করুন। পাস করা স্ট্রিংটিNotification.Builder
এ প্রদত্ত শর্টকাট আইডির সাথে মেলে। -
Icon.createWithContentUri()
দিয়ে বাবল আইকন তৈরি করুন, অথবা নতুন পদ্ধতিcreateWithAdaptiveBitmapContentUri()
দিয়ে।
5G ভিজ্যুয়াল সূচক
ব্যবহারকারীদের ডিভাইসে 5G সূচক প্রদর্শনের তথ্যের জন্য, আপনার ব্যবহারকারীদের বলুন যখন তারা 5G এ থাকবেন দেখুন।
গোপনীয়তা
অ্যান্ড্রয়েড 11 ব্যবহারকারীর গোপনীয়তা বাড়ানোর জন্য প্রচুর সংখ্যক পরিবর্তন এবং বিধিনিষেধ প্রবর্তন করে। আরও জানতে, গোপনীয়তা পৃষ্ঠা দেখুন।
নিরাপত্তা
বায়োমেট্রিক প্রমাণীকরণ আপডেট
আপনার অ্যাপের ডেটার নিরাপত্তার স্তর নিয়ন্ত্রণে সাহায্য করার জন্য, Android 11 বায়োমেট্রিক প্রমাণীকরণে বেশ কিছু উন্নতি প্রদান করে। এই পরিবর্তনগুলি জেটপ্যাক বায়োমেট্রিক লাইব্রেরিতেও দেখা যায়।
প্রমাণীকরণ প্রকার
Android 11 BiometricManager.Authenticators
ইন্টারফেস প্রবর্তন করেছে, যা আপনি আপনার অ্যাপ সমর্থন করে এমন প্রমাণীকরণের ধরন ঘোষণা করতে ব্যবহার করতে পারেন।
কোন প্রমাণীকরণ প্রকার ব্যবহার করা হয়েছে তা নির্ধারণ করুন
ব্যবহারকারীর প্রমাণীকরণের পরে, আপনি getAuthenticationType()
কল করে একটি ডিভাইস শংসাপত্র বা বায়োমেট্রিক শংসাপত্র ব্যবহার করে ব্যবহারকারী প্রমাণীকরণ করেছেন কিনা তা পরীক্ষা করতে পারেন।
প্রমাণ-প্রতি-ব্যবহার কীগুলির জন্য অতিরিক্ত সমর্থন
Android 11 প্রমাণ-প্রতি-ব্যবহার কী ব্যবহার করে প্রমাণীকরণের জন্য আরও সমর্থন প্রদান করে।
অপ্রচলিত পদ্ধতি
Android 11 নিম্নলিখিত পদ্ধতিগুলিকে অবজ্ঞা করে:
-
setDeviceCredentialAllowed()
পদ্ধতি। -
setUserAuthenticationValidityDurationSeconds()
পদ্ধতি। -
canAuthenticate()
এর ওভারলোডেড সংস্করণ যা কোন আর্গুমেন্ট নেয় না।
বড় ডেটাসেটের নিরাপদ শেয়ারিং
কিছু পরিস্থিতিতে, যেমন মেশিন লার্নিং বা মিডিয়া প্লেব্যাক জড়িত, আপনার অ্যাপ অন্য অ্যাপের মতো একই বড় ডেটাসেট ব্যবহার করতে চাইতে পারে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণে, আপনার অ্যাপ এবং অন্য অ্যাপের প্রত্যেককে একই ডেটাসেটের একটি পৃথক কপি ডাউনলোড করতে হবে।
নেটওয়ার্ক এবং ডিস্ক উভয় ক্ষেত্রেই ডেটা রিডানডেন্সি কমাতে সাহায্য করার জন্য, Android 11 এই বৃহৎ ডেটাসেটগুলিকে শেয়ার করা ডেটা ব্লব ব্যবহার করে ডিভাইসে ক্যাশে করার অনুমতি দেয়৷ ডেটাসেট শেয়ার করার বিষয়ে আরও জানতে, বড় ডেটাসেট শেয়ার করার বিষয়ে গভীর নির্দেশিকা দেখুন।
ব্যবহারকারীর শংসাপত্র ছাড়াই OTA পুনরায় চালু করার পরে ফাইল-ভিত্তিক এনক্রিপশন সম্পাদন করুন
ডিভাইসটি একটি OTA আপডেট সম্পূর্ণ করার পরে এবং পুনরায় চালু হওয়ার পরে, শংসাপত্র-সুরক্ষিত স্টোরেজে রাখা ক্রেডেনশিয়াল এনক্রিপ্টেড কী (CE) ফাইল-ভিত্তিক এনক্রিপশন (FBE) অপারেশনের জন্য অবিলম্বে উপলব্ধ। এর মানে হল যে, একটি OTA আপডেটের পরে, ব্যবহারকারী তাদের পিন, প্যাটার্ন বা পাসওয়ার্ড প্রবেশ করার আগে আপনার অ্যাপটি পুনরায় শুরু করতে পারে যার জন্য CE কীগুলির প্রয়োজন হয়৷
কর্মক্ষমতা এবং গুণমান
ওয়্যারলেস ডিবাগিং
অ্যান্ড্রয়েড 11 অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) এর মাধ্যমে আপনার ওয়ার্কস্টেশন থেকে ওয়্যারলেসভাবে আপনার অ্যাপ স্থাপন এবং ডিবাগিং সমর্থন করে। উদাহরণস্বরূপ, আপনি USB এর মাধ্যমে আপনার ডিভাইসটিকে শারীরিকভাবে সংযুক্ত না করে এবং ড্রাইভার ইনস্টলেশনের মতো সাধারণ USB সংযোগের সমস্যাগুলির সাথে লড়াই না করেই একাধিক দূরবর্তী ডিভাইসে আপনার ডিবাগযোগ্য অ্যাপ স্থাপন করতে পারেন। আরও তথ্যের জন্য, একটি হার্ডওয়্যার ডিভাইসে অ্যাপ্লিকেশন চালান দেখুন।
ADB ইনক্রিমেন্টাল APK ইনস্টলেশন
একটি ডিভাইসে বড় (2GB+) APK ইনস্টল করতে অনেক সময় লাগতে পারে, এমনকি একটি অ্যাপে সামান্য পরিবর্তন করা হলেও। ADB (Android ডিবাগ ব্রিজ) ক্রমবর্ধমান 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
অ্যান্ড্রয়েড 11 নিউরাল নেটওয়ার্ক API (NNAPI) প্রসারিত এবং উন্নত করে।
নতুন অপারেশন
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-তে অগ্রাধিকার এবং কাজের সময়সীমার জন্য সমর্থন অন্তর্ভুক্ত করে:
মেমরি ডোমেন ইনপুট/আউটপুট: এনএনএপিআই 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
অপারেন্ড টাইপ ব্যবহার করে অন্যান্য মডেলকে আর্গুমেন্ট হিসাবে গ্রহণ করে। উপরন্তু, এই বৈশিষ্ট্য নিম্নলিখিত নতুন ফাংশন যোগ করে:
এনডিকে থার্মাল এপিআই
যখন ডিভাইসগুলি খুব গরম হয়ে যায়, তখন তারা CPU এবং/অথবা GPU থ্রোটল করতে পারে এবং এটি অপ্রত্যাশিত উপায়ে অ্যাপগুলিকে প্রভাবিত করতে পারে। জটিল গ্রাফিক্স, ভারী গণনা বা টেকসই নেটওয়ার্ক কার্যকলাপ অন্তর্ভুক্ত করে এমন অ্যাপ বা গেমগুলি সমস্যার সম্মুখীন হওয়ার সম্ভাবনা বেশি।
ডিভাইসে তাপমাত্রার পরিবর্তনগুলি নিরীক্ষণ করতে Android 11-এ NDK Thermal API ব্যবহার করুন এবং তারপরে কম পাওয়ার ব্যবহার এবং ডিভাইসের ঠান্ডা তাপমাত্রা বজায় রাখার জন্য পদক্ষেপ নিন। এই APIটি জাভা থার্মাল API- এর অনুরূপ; আপনি যেকোনো তাপীয় অবস্থা পরিবর্তনের জন্য বিজ্ঞপ্তি পেতে বা সরাসরি বর্তমান অবস্থা পোল করতে এটি ব্যবহার করতে পারেন।
পাঠ্য এবং ইনপুট
উন্নত IME ট্রানজিশন
অ্যান্ড্রয়েড 11 ইনপুট মেথড এডিটর (আইএমই), যেমন অন-স্ক্রিন কীবোর্ডগুলির জন্য পরিবর্তনগুলি উন্নত করতে নতুন APIগুলি প্রবর্তন করে৷ এই APIগুলি আপনার অ্যাপের বিষয়বস্তুকে IME-এর উপস্থিতি এবং অন্তর্ধানের সাথে এবং স্থিতি এবং নেভিগেশন বারের মতো অন্যান্য উপাদানগুলির সাথে সিঙ্ক্রোনাইজেশনে সামঞ্জস্য করা সহজ করে তোলে৷
যেকোনো EditText
ফোকাস থাকা অবস্থায় একটি IME দেখাতে, view.getInsetsController(). show(Type.ime())
(আপনি ফোকাস করা EditText
এর মত একই পদক্রমের যেকোন ভিউতে এই পদ্ধতিটিকে কল করতে পারেন, আপনাকে এটিকে EditText
এ বিশেষভাবে কল করতে হবে না।) IME লুকানোর জন্য, view.getInsetsController(). hide(Type.ime())
আপনি view.getRootWindowInsets(). isVisible(Type.ime())
।
IME এর উপস্থিতি এবং অদৃশ্য হওয়ার সাথে আপনার অ্যাপের ভিউ সিঙ্ক্রোনাইজ করতে, একটি WindowInsetsAnimation.Callback
প্রদান করে একটি ভিউতে একজন শ্রোতাকে সেট করুন View.setWindowInsetsAnimationCallback()
এ কলব্যাক করুন। (আপনি এই শ্রোতাকে যেকোনো ভিউতে সেট করতে পারেন, এটি একটি EditText
হতে হবে না।) IME আপনার শ্রোতার onPrepare()
পদ্ধতিতে কল করে, তারপর এটি পরিবর্তনের শুরুতে onStart()
কল করে। এটি তারপর পরিবর্তনের প্রতিটি অগ্রগতিতে onProgress()
কল করে। ট্রানজিশন শেষ হলে, IME কল করে onEnd()
। ট্রানজিশনের যেকোন সময়ে, WindowInsetsAnimation.getFraction()
কল করে ট্রানজিশন কতটা অগ্রগতি করেছে তা জানতে পারবেন।
এই APIগুলি কীভাবে ব্যবহার করবেন তার একটি উদাহরণের জন্য, নতুন WindowInsets অ্যানিমেশন কোড নমুনা দেখুন।
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; } });
আইএমই বা অন্য সিস্টেম বার সরাতে, কন্ট্রোলারের 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() {} });
আইসিইউ লাইব্রেরিতে আপডেট
অ্যান্ড্রয়েড 11 আইসিইউ লাইব্রেরির সংস্করণ 66 ব্যবহার করার জন্য android.icu
প্যাকেজ আপডেট করে, Android 10-এর সংস্করণ 63-এর তুলনায়। নতুন লাইব্রেরি সংস্করণে আপডেট করা CLDR লোকেল ডেটা এবং অ্যান্ড্রয়েডে আন্তর্জাতিকীকরণ সমর্থনের জন্য অনেকগুলি বর্ধিতকরণ অন্তর্ভুক্ত রয়েছে।
নতুন লাইব্রেরি সংস্করণগুলির উল্লেখযোগ্য পরিবর্তনগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
- অনেক ফরম্যাটিং API এখন একটি নতুন রিটার্ন অবজেক্ট টাইপ সমর্থন করে যা
FormattedValue
প্রসারিত করে। -
LocaleMatcher
API একটি বিল্ডার ক্লাস,java.util.Locale
টাইপের জন্য সমর্থন এবং একটি ম্যাচ সম্পর্কে অতিরিক্ত ডেটা সমন্বিত একটি ফলাফল ক্লাস সহ উন্নত করা হয়েছে। - ইউনিকোড 13 এখন সমর্থিত।
মিডিয়া
MediaCodec বাফার বরাদ্দ করা হচ্ছে
অ্যান্ড্রয়েড 11-এ একটি নতুন MediaCodec
API রয়েছে যা ইনপুট এবং আউটপুট বাফারগুলি বরাদ্দ করার সময় অ্যাপগুলিকে আরও নিয়ন্ত্রণ দেয়। এটি আপনার অ্যাপকে আরও দক্ষতার সাথে মেমরি পরিচালনা করতে দেয়।
নতুন ক্লাস:
নতুন পদ্ধতি:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
উপরন্তু, MediaCodec.Callback()
এ দুটি পদ্ধতির আচরণ পরিবর্তিত হয়েছে:
-
onInputBufferAvailable()
- সূচী সহ
MediaCodec.getInputBuffer()
এবংMediaCodec.queueInputBuffer()
কল করার পরিবর্তে, ব্লক মডেল API ব্যবহার করার জন্য কনফিগার করা হলে, অ্যাপগুলিকে সূচির সাথেMediaCodec.getQueueRequest
ব্যবহার করা উচিত, স্লটে একটি LinearBlock/HardwareBuffer সংযুক্ত করা। -
onOutputBufferAvailable()
- সূচকের সাথে
MediaCodec.getOutputBuffer()
কল করার পরিবর্তে, অ্যাপগুলি আরও তথ্য এবং LinearBlock/HardwareBuffer বাফার সহOutputFrame
অবজেক্ট পেতে সূচকের সাথেMediaCodec.getOutputFrame()
ব্যবহার করতে পারে।
MediaCodec-এ লো-লেটেন্সি ডিকোডিং
অ্যান্ড্রয়েড 11 গেমস এবং অন্যান্য রিয়েল-টাইম অ্যাপের জন্য কম লেটেন্সি ডিকোডিং সমর্থন করতে MediaCodec
উন্নত করে। আপনি MediaCodecInfo.CodecCapabilities.isFeatureSupported()
এ FEATURE_LowLatency
পাস করে একটি কোডেক কম-বিলম্বিত ডিকোডিং সমর্থন করে কিনা তা পরীক্ষা করতে পারেন।
কম লেটেন্সি ডিকোডিং চালু বা বন্ধ করতে, নিচের যে কোনো একটি করুন:
-
MediaCodec.configure()
ব্যবহার করে নতুন কীKEY_LOW_LATENCY
0 বা 1 এ সেট করুন। -
MediaCodec.setParameters()
ব্যবহার করে নতুন প্যারামিটার কীPARAMETER_KEY_LOW_LATENCY
0 বা 1 এ সেট করুন।
নতুন 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 ব্যবহার করে এমন অ্যাপগুলির জন্য নতুন আচরণ প্রয়োগ করে।
একটি অ্যাপের মধ্যে থেকে কাস্টিং বিকল্পগুলি অ্যাক্সেস করার পাশাপাশি স্যুইচিং বিকল্পগুলিও সিস্টেম মিডিয়া প্লেয়ারে উপস্থিত হয়৷ এটি ব্যবহারকারীকে ডিভাইসগুলির মধ্যে চলাফেরা করার সময় একটি নির্বিঘ্ন যাত্রা দিতে সাহায্য করে যখন তারা তাদের দেখার এবং শোনার প্রসঙ্গ পরিবর্তন করে, যেমন রান্নাঘরে ভিডিও দেখা বনাম ফোনে, বা বাড়িতে বা গাড়িতে অডিও শোনা। আউটপুট সুইচার দেখুন।
সংযোগ
Wi-Fi পাসপয়েন্ট বর্ধিতকরণ
Android 11-এ যোগ করা পাসপয়েন্ট ক্ষমতা সম্পর্কে তথ্যের জন্য, পাসপয়েন্ট দেখুন।
Wi-Fi সাজেশন API প্রসারিত হয়েছে৷
Android 11 নিম্নলিখিতগুলি সহ আপনার অ্যাপের নেটওয়ার্ক পরিচালনার ক্ষমতা বাড়াতে Wi-Fi সাজেশন API প্রসারিত করে:
- সংযোগ বিচ্ছিন্ন করার অনুরোধের অনুমতি দিয়ে কানেক্টিভিটি ম্যানেজমেন্ট অ্যাপগুলি তাদের নিজস্ব নেটওয়ার্ক পরিচালনা করতে পারে।
- পাসপয়েন্ট নেটওয়ার্কগুলি সাজেশন এপিআইতে একত্রিত করা হয়েছে এবং ব্যবহারকারীকে পরামর্শ দেওয়া যেতে পারে।
- Analytics এপিআই আপনাকে আপনার নেটওয়ার্কের গুণমান সম্পর্কে তথ্য পেতে সক্ষম করে।
CallScreeningService আপডেট
Android 11 থেকে শুরু করে, একটি CallScreeningService ইনকামিং কলগুলির জন্য STIR/SHAKEN যাচাইকরণ স্ট্যাটাস (verstat) সম্পর্কে তথ্যের জন্য অনুরোধ করতে পারে। ইনকামিং কলের জন্য কলের বিবরণের অংশ হিসেবে এই তথ্য প্রদান করা হয়।
যদি কোনো CallScreeningService
কাছে READ_CONTACTS
অনুমতি থাকে, তাহলে ব্যবহারকারীর পরিচিতির কোনো নম্বর থেকে ইনকামিং কল বা আউটগোয়িং কল হলে অ্যাপটিকে অবহিত করা হয়।
আরও তথ্যের জন্য, কলার আইডি স্পুফিং প্রতিরোধ করুন দেখুন।
মোবাইল API আপডেট খুলুন
Android 11 এবং উচ্চতর সংস্করণে OMAPI সমর্থন সম্পর্কে তথ্যের জন্য, ওপেন মোবাইল API রিডার সমর্থন দেখুন।
পারফরম্যান্ট ভিপিএন
যে অ্যাপগুলি API স্তর 30 এবং উচ্চতর লক্ষ্য করে বা যেগুলি API স্তর 29 এবং উচ্চতর ডিভাইসে চালু হয় সেগুলি ব্যবহারকারী-কনফিগার করা এবং অ্যাপ-ভিত্তিক VPN উভয়ের জন্য VPNগুলিতে IKEv2/IPsec প্রয়োগ করতে পারে।
VPNগুলি অপারেটিং সিস্টেমে চলে, একটি অ্যাপে IKEv2/IPsec VPN সংযোগ স্থাপনের জন্য প্রয়োজনীয় কোডটিকে সরল করে।
প্রতি-প্রক্রিয়া নেটওয়ার্ক অ্যাক্সেস নিয়ন্ত্রণ
প্রতি-প্রক্রিয়ার ভিত্তিতে নেটওয়ার্ক অ্যাক্সেস সক্ষম করার তথ্যের জন্য, নেটওয়ার্ক ব্যবহার পরিচালনা দেখুন।
একই FQDN সহ একাধিক ইনস্টল করা পাসপয়েন্ট কনফিগারেশনের অনুমতি দিন
Android 11 থেকে শুরু করে, আপনি PasspointConfiguration.getUniqueId()
ব্যবহার করতে পারেন একটি PasspointConfiguration
অবজেক্টের জন্য একটি অনন্য শনাক্তকারী পেতে, যা আপনার অ্যাপের ব্যবহারকারীদের একই সম্পূর্ণ যোগ্য ডোমেন নাম (FQDN) সহ একাধিক প্রোফাইল ইনস্টল করতে সক্ষম করে।
এই কার্যকারিতাটি সহায়ক হয় যখন একটি ক্যারিয়ার তাদের নেটওয়ার্কে মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC) এর একাধিক সংমিশ্রণ স্থাপন করে, কিন্তু শুধুমাত্র একটি একক FQDN থাকে। Android 11 এবং উচ্চতর সংস্করণে, একই FQDN এর সাথে একাধিক প্রোফাইল ইনস্টল করা সম্ভব যা হোম প্রদানকারী হিসাবে নেটওয়ার্কের সাথে মিলবে যখন ব্যবহারকারী MCC বা MNC এর সাথে একটি সিম ইনস্টল করেন।
GNSS অ্যান্টেনা সমর্থন
অ্যান্ড্রয়েড 11 GnssAntennaInfo
ক্লাস প্রবর্তন করেছে, যা গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) প্রদান করতে পারে এমন সেন্টিমিটার-নির্ভুলতা অবস্থানের আরও বেশি ব্যবহার করা আপনার অ্যাপকে সম্ভব করে তোলে।
অ্যান্টেনা ক্রমাঙ্কন তথ্যের গাইডে আরও জানুন।
গ্রাফিক্স
NDK ইমেজ ডিকোডার
NDK ImageDecoder
API Android C/C++ অ্যাপের জন্য সরাসরি ছবি ডিকোড করার জন্য একটি আদর্শ API প্রদান করে। অ্যাপ ডেভেলপারদের আর ফ্রেমওয়ার্ক API ব্যবহার করতে হবে না (JNI এর মাধ্যমে) বা তৃতীয় পক্ষের ইমেজ-ডিকোডিং লাইব্রেরি বান্ডিল করতে হবে। আরও তথ্যের জন্য, চিত্র ডিকোডার বিকাশকারী নির্দেশিকা দেখুন।
ফ্রেম রেট API
অ্যান্ড্রয়েড 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>
ছবি এবং ক্যামেরা
সক্রিয় ক্যাপচারের সময় বিজ্ঞপ্তি শব্দ এবং কম্পন নিঃশব্দ করুন
অ্যান্ড্রয়েড 11 থেকে শুরু করে, সক্রিয়ভাবে ক্যামেরা ব্যবহার করার সময়, আপনার অ্যাপটি শুধুমাত্র কম্পন, শব্দ এবং কম্পন উভয়ই মিউট করতে পারে, অথবা setCameraAudioRestriction()
ব্যবহার করেও নয়।
অ্যান্ড্রয়েড এমুলেটরে প্রসারিত ক্যামেরা সমর্থন
অ্যান্ড্রয়েড 11 দিয়ে শুরু হওয়া এমুলেটরে ক্যামেরার জন্য প্রসারিত সমর্থন সম্পর্কে তথ্যের জন্য, ক্যামেরা সমর্থন দেখুন।
একাধিক ক্যামেরার একযোগে ব্যবহারের জন্য সমর্থন
অ্যান্ড্রয়েড 11 সামনে এবং পিছনের ক্যামেরা উভয়ই সহ একসাথে একাধিক ক্যামেরা ব্যবহার করার জন্য অনুসন্ধান সমর্থনে API যুক্ত করে।
আপনার অ্যাপটি যে ডিভাইসে চলছে তাতে সমর্থনের জন্য পরীক্ষা করতে, নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
-
getConcurrentCameraIds()
ক্যামেরা আইডিগুলির সংমিশ্রণের একটিSet
প্রদান করে যা একই অ্যাপ্লিকেশন প্রক্রিয়া দ্বারা কনফিগার করা হলে নিশ্চিত স্ট্রিম সমন্বয়ের সাথে একযোগে স্ট্রিম করতে পারে। -
isConcurrentSessionConfigurationSupported()
ক্যামেরা ডিভাইস একই সাথে সংশ্লিষ্ট সেশন কনফিগারেশন সমর্থন করতে পারে কিনা তা জিজ্ঞাসা করে।
একাধিক ফ্রেম সহ HEIF চিত্রগুলির জন্য আরও ভাল সমর্থন
অ্যান্ড্রয়েড 11 থেকে শুরু করে, আপনি যদি ImageDecoder.decodeDrawable()
কল করেন এবং ফ্রেমের একটি ক্রম (যেমন একটি অ্যানিমেশন বা একটি বিস্ফোরিত ফটো) সম্বলিত একটি HEIF চিত্র পাস করেন, তবে পদ্ধতিটি সম্পূর্ণ চিত্রের ক্রম ধারণকারী একটি AnimatedImageDrawable
প্রদান করে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, পদ্ধতিটি শুধুমাত্র একটি একক ফ্রেমের BitmapDrawable
ফিরিয়ে দিয়েছে।
যদি HEIF গ্রাফিকে একাধিক ফ্রেম থাকে যা একটি ক্রমানুসারে না থাকে, তাহলে আপনি MediaMetadataRetriever.getImageAtIndex()
কল করে একটি পৃথক ফ্রেম পুনরুদ্ধার করতে পারেন।
অ্যাক্সেসযোগ্যতা
অ্যাক্সেসিবিলিটি পরিষেবা বিকাশকারীদের জন্য আপডেট৷
আপনি যদি একটি কাস্টম অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করেন তবে আপনি Android 11-এ নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:
- একটি অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারী-মুখী ব্যাখ্যা এখন প্লেইন টেক্সট ছাড়াও এইচটিএমএল এবং ইমেজগুলির জন্য অনুমতি দেয়। এই নমনীয়তা আপনার পরিষেবা কী করে এবং কীভাবে এটি তাদের সাহায্য করতে পারে তা শেষ-ব্যবহারকারীদের ব্যাখ্যা করা সহজ করে তোলে।
- একটি UI উপাদানের অবস্থার বর্ণনার সাথে কাজ করতে যা
contentDescription
এর চেয়ে অর্থপূর্ণ অর্থপূর্ণ,getStateDescription()
পদ্ধতিতে কল করুন। - টাচ ইভেন্টগুলি সিস্টেমের টাচ এক্সপ্লোরারকে বাইপাস করার অনুরোধ করতে,
setTouchExplorationPassthroughRegion()
কল করুন। একইভাবে, অনুরোধ করার জন্য যে অঙ্গভঙ্গিগুলি সিস্টেমের অঙ্গভঙ্গি সনাক্তকারীকে বাইপাস করে,setGestureDetectionPassthroughRegion()
কল করুন। - আপনি IME অ্যাকশনের অনুরোধ করতে পারেন, যেমন "এন্টার" এবং "নেক্সট", সেইসাথে
FLAG_SECURE
পতাকা সক্ষম করে না এমন উইন্ডোগুলির স্ক্রিনশট।
অতিরিক্ত বৈশিষ্ট্য
অ্যাপ্লিকেশন প্রক্রিয়া প্রস্থান কারণ
Android 11 ActivityManager.getHistoricalProcessExitReasons()
পদ্ধতি প্রবর্তন করেছে, যা সাম্প্রতিক প্রক্রিয়া বন্ধ হওয়ার কারণগুলি রিপোর্ট করে৷ অ্যাপ্লিকেশানগুলি ক্র্যাশ ডায়াগনস্টিক তথ্য সংগ্রহ করতে এই পদ্ধতিটি ব্যবহার করতে পারে, যেমন ANR, মেমরি সমস্যা বা অন্যান্য কারণে কোনও প্রক্রিয়া সমাপ্ত হয়েছে কিনা। অতিরিক্তভাবে, আপনি নতুন setProcessStateSummary()
পদ্ধতিটি পরবর্তী বিশ্লেষণের জন্য কাস্টম স্টেটের তথ্য সংরক্ষণ করতে ব্যবহার করতে পারেন।
getHistoricalProcessExitReasons()
পদ্ধতিটি ApplicationExitInfo
ক্লাসের উদাহরণ প্রদান করে, যেটিতে একটি অ্যাপ প্রক্রিয়ার মৃত্যুর সাথে সম্পর্কিত তথ্য রয়েছে। এই ক্লাসের একটি উদাহরণে getReason()
কল করার মাধ্যমে, আপনি নির্ধারণ করতে পারেন কেন আপনার অ্যাপের প্রক্রিয়াটি বন্ধ হয়ে গেছে। উদাহরণ স্বরূপ, REASON_CRASH
এর একটি রিটার্ন মান নির্দেশ করে যে আপনার অ্যাপে একটি আন-হ্যান্ডেল করা ব্যতিক্রম ঘটেছে। যদি আপনার অ্যাপের প্রস্থান ইভেন্টগুলির জন্য স্বতন্ত্রতা নিশ্চিত করতে হয়, তাহলে এটি একটি অ্যাপ-নির্দিষ্ট শনাক্তকারী বজায় রাখতে পারে, যেমন getTimestamp()
পদ্ধতি থেকে টাইমস্ট্যাম্পের উপর ভিত্তি করে হ্যাশ মান।
অতিরিক্ত সম্পদ
আরও তথ্যের জন্য, অ্যাপ্লিকেশানগুলিকে মিডিয়ামে আরও ব্যক্তিগত এবং স্থিতিশীল করতে নতুন Android 11 সরঞ্জামগুলি সম্পর্কে নিবন্ধটি পড়ুন।
রিসোর্স লোডার
অ্যান্ড্রয়েড 11 একটি নতুন API প্রবর্তন করেছে যা অ্যাপগুলিকে কীভাবে সংস্থানগুলি অনুসন্ধান এবং লোড করা হয় তা গতিশীলভাবে প্রসারিত করতে দেয়। নতুন API ক্লাস ResourcesLoader
এবং ResourcesProvider
নতুন কার্যকারিতা প্রদানের জন্য প্রাথমিকভাবে দায়ী। একসাথে, তারা অতিরিক্ত সম্পদ এবং সম্পদ সরবরাহ করার ক্ষমতা প্রদান করে, বা বিদ্যমান সম্পদ এবং সম্পদের মান পরিবর্তন করে।
ResourcesLoader
অবজেক্টগুলি এমন কন্টেইনার যা একটি অ্যাপের Resources
ইনস্ট্যান্সে ResourcesProvider
অবজেক্ট সরবরাহ করে। পরিবর্তে, ResourcesProvider
অবজেক্টগুলি APK এবং রিসোর্স টেবিল থেকে রিসোর্স ডেটা লোড করার পদ্ধতি প্রদান করে।
এই API-এর জন্য একটি প্রাথমিক ব্যবহারের ক্ষেত্রে কাস্টম সম্পদ লোডিং। আপনি একটি ResourcesProvider
তৈরি করতে loadFromDirectory()
ব্যবহার করতে পারেন যা ফাইল-ভিত্তিক সংস্থান এবং সম্পদের রেজোলিউশনকে পুনর্নির্দেশ করে, যার ফলে এটি অ্যাপ্লিকেশন APK-এর পরিবর্তে একটি নির্দিষ্ট ডিরেক্টরি অনুসন্ধান করতে পারে। আপনি AssetManager
API ক্লাস থেকে open()
পদ্ধতির পরিবারের মাধ্যমে এই সম্পদগুলি অ্যাক্সেস করতে পারেন, ঠিক যেমন APK-এ বান্ডিল করা সম্পদগুলির সাথে।
APK স্বাক্ষর স্কিম v4
Android 11 APK স্বাক্ষর স্কিম v4 এর জন্য সমর্থন যোগ করে। এই স্কিমটি একটি পৃথক ফাইলে ( apk-name .apk.idsig
) একটি নতুন ধরনের স্বাক্ষর তৈরি করে কিন্তু অন্যথায় v2 এবং v3 এর মতো। APK এ কোন পরিবর্তন করা হয় না। এই স্কিমটি ADB বর্ধিত APK ইনস্টলেশনকে সমর্থন করে, যা APK ইনস্টলের গতি বাড়ায়।
গতিশীল অভিপ্রায় ফিল্টার
ইন্টেন্টগুলি পাওয়ার জন্য, একটি অ্যাপকে অবশ্যই কম্পাইলের সময় ঘোষণা করতে হবে যে এটি অ্যাপ ম্যানিফেস্টে একটি অভিপ্রায় ফিল্টার সংজ্ঞায়িত করে কোন ধরণের ডেটা গ্রহণ করতে সক্ষম। অ্যান্ড্রয়েড 10 এবং তার নিচের সংস্করণে, অ্যাপ্লিকেশানগুলির রানটাইমে তাদের উদ্দেশ্য ফিল্টারগুলি পরিবর্তন করার কোনও উপায় নেই। এটি ভার্চুয়ালাইজেশন অ্যাপগুলির জন্য একটি সমস্যা (যেমন ভার্চুয়াল মেশিন এবং রিমোট ডেস্কটপ) কারণ ব্যবহারকারীরা তাদের ভিতরে কোন সফ্টওয়্যার ইনস্টল করবেন তা জানার কোন উপায় তাদের নেই।
অ্যান্ড্রয়েড 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
এপিআই ক্লাসে নিম্নলিখিত নতুন পদ্ধতিতে একটি MIME গ্রুপের আইডি পাস করে তার বিষয়বস্তু অ্যাক্সেস এবং আপডেট করতে পারেন:
আপনি যখন একটি MIME গ্রুপে প্রোগ্রাম্যাটিকভাবে একটি MIME প্রকার যোগ করেন, তখন এটি ম্যানিফেস্টে স্পষ্টভাবে ঘোষিত একটি স্ট্যাটিক MIME প্রকারের মতোই কাজ করে৷
অটোফিল বর্ধিতকরণ
অ্যান্ড্রয়েড 11 অটোফিল পরিষেবাগুলির জন্য উন্নতি প্রবর্তন করে৷
AssistStructure.ViewNode-এ ইঙ্গিত শনাক্তকারী
ভিউ এর বৈশিষ্ট্যের উপর ভিত্তি করে একটি ভিউয়ের জন্য একটি স্বাক্ষর হ্যাশ গণনা করা অটোফিল পরিষেবাগুলির জন্য প্রায়ই দরকারী। সিগনেচার হ্যাশ কম্পিউট করার সময় ভিউ ইঙ্গিতটি অন্তর্ভুক্ত করার জন্য একটি বিশেষ বৈশিষ্ট্য, তবে ইঙ্গিত স্ট্রিংটি ফোনের লোকেলের সাথে পরিবর্তিত হতে পারে। এই সমস্যা সমাধানের জন্য, Android 11 একটি নতুন getHintIdEntry()
পদ্ধতির সাহায্যে AssistStructure.ViewNode
প্রসারিত করে, যা একটি ভিউ-এর ইঙ্গিত পাঠের জন্য রিসোর্স শনাক্তকারী প্রদান করে। এই পদ্ধতিটি একটি লোকেল-স্বাধীন মান প্রদান করে যা আপনি স্বাক্ষর হ্যাশ গণনা করতে ব্যবহার করতে পারেন।
ডেটাসেট ইভেন্ট দেখানো হয়েছে
অটোফিল পরিষেবাগুলিকে তাদের পরামর্শগুলি উন্নত করতে সহায়তা করার জন্য, Android 11 এমন ক্ষেত্রে সনাক্ত করার একটি উপায় প্রদান করে যেখানে একটি অটোফিল পরিষেবা ডেটাসেট উপস্থাপন করে কিন্তু ব্যবহারকারী সেগুলির কোনওটি নির্বাচন করেননি। Android 11-এ, FillEventHistory
একটি নতুন TYPE_DATASETS_SHOWN
ইভেন্ট টাইপ রিপোর্ট করে। FillEventHistory
এই ধরনের একটি ইভেন্ট লগ করে যখনই অটোফিল পরিষেবা ব্যবহারকারীকে এক বা একাধিক ডেটাসেট উপস্থাপন করে। অটোফিল পরিষেবাগুলি বিদ্যমান TYPE_DATASET_SELECTED
ইভেন্টের সাথে একত্রে এই ইভেন্টগুলি ব্যবহার করতে পারে ব্যবহারকারী প্রদত্ত অটোফিল বিকল্পগুলির মধ্যে কোনটি নির্বাচন করেছেন কিনা তা নির্ধারণ করতে৷
আইএমই ইন্টিগ্রেশন
কীবোর্ড এবং অন্যান্য আইএমইগুলি এখন ড্রপ-ডাউন মেনুতে পরিবর্তে, একটি সাজেশন স্ট্রিপ বা অনুরূপ ইন্টারফেসে অটোফিল পরামর্শ ইনলাইনে প্রদর্শন করতে পারে। পাসওয়ার্ড এবং ক্রেডিট-কার্ড নম্বরের মতো সংবেদনশীল তথ্য রক্ষা করার জন্য, পরামর্শগুলি ব্যবহারকারীর কাছে প্রদর্শিত হয় কিন্তু ব্যবহারকারী একটি নির্বাচন না করা পর্যন্ত IME-এর কাছে তা জানা যায় না। IME এবং পাসওয়ার্ড ম্যানেজাররা কীভাবে এই বৈশিষ্ট্যটিকে সমর্থন করতে পারে সে সম্পর্কে তথ্যের জন্য, কীবোর্ডের সাথে অটোফিল একীভূত করা দেখুন।
বিষয়বস্তু ক্যাপচার পরিষেবার সাথে ডেটা শেয়ারিং
Android 11 থেকে শুরু করে, আপনার অ্যাপ ডিভাইসের সামগ্রী ক্যাপচার পরিষেবার সাথে ডেটা ভাগ করতে পারে। এই ক্ষমতাটি একটি ডিভাইসের জন্য প্রাসঙ্গিক বুদ্ধিমত্তা প্রদান করা সহজ করে তোলে, যেমন একটি গানের নাম দেখানো যা বর্তমানে ব্যবহারকারীর পরিবেশে চলছে৷
আপনার অ্যাপ থেকে ডেটা সামগ্রী ক্যাপচার পরিষেবাতে উপলব্ধ করতে, ContentCaptureManager
এর একটি উদাহরণে shareData()
পদ্ধতিতে কল করুন। যদি সিস্টেম ডেটা-শেয়ারিং অনুরোধ গ্রহণ করে, তাহলে আপনার অ্যাপটি কন্টেন্ট ক্যাপচার পরিষেবার সাথে শেয়ার করার জন্য শুধুমাত্র-লেখার জন্য একটি ফাইল বর্ণনাকারী পাবে।
অ্যান্ড্রয়েড 11 ডেভেলপারদের জন্য দুর্দান্ত নতুন বৈশিষ্ট্য এবং এপিআই প্রবর্তন করেছে। নীচের বিভাগগুলি আপনাকে আপনার অ্যাপগুলির বৈশিষ্ট্যগুলি সম্পর্কে জানতে এবং সম্পর্কিত APIগুলির সাথে শুরু করতে সহায়তা করে৷
নতুন, পরিবর্তিত এবং সরানো API-এর বিস্তারিত তালিকার জন্য, API ডিফ রিপোর্ট পড়ুন। নতুন এপিআই সম্পর্কে বিস্তারিত জানার জন্য অ্যান্ড্রয়েড এপিআই রেফারেন্স দেখুন — নতুন এপিআইগুলি দৃশ্যমানতার জন্য হাইলাইট করা হয়েছে। এছাড়াও, প্ল্যাটফর্মের পরিবর্তনগুলি আপনার অ্যাপ্লিকেশনগুলিকে প্রভাবিত করতে পারে এমন অঞ্চলগুলি সম্পর্কে জানতে, অ্যান্ড্রয়েড আর এবং সমস্ত অ্যাপ্লিকেশনগুলির জন্য এবং গোপনীয়তার পরিবর্তনের জন্য অ্যাপ্লিকেশনগুলির জন্য অ্যান্ড্রয়েড 11 আচরণের পরিবর্তনগুলি পরীক্ষা করে দেখুন।
নতুন অভিজ্ঞতা
ডিভাইস নিয়ন্ত্রণ
অ্যান্ড্রয়েড 11 এ একটি নতুন ControlsProviderService
এপিআই অন্তর্ভুক্ত রয়েছে যা আপনি সংযুক্ত, বাহ্যিক ডিভাইসের জন্য নিয়ন্ত্রণগুলি প্রকাশ করতে ব্যবহার করতে পারেন। এই নিয়ন্ত্রণগুলি অ্যান্ড্রয়েড পাওয়ার মেনুতে ডিভাইস নিয়ন্ত্রণের অধীনে উপস্থিত হয়। আরও তথ্যের জন্য, বাহ্যিক ডিভাইসগুলি নিয়ন্ত্রণ করুন।
মিডিয়া কন্ট্রোল
অ্যান্ড্রয়েড 11 আপডেটগুলি কীভাবে মিডিয়া নিয়ন্ত্রণগুলি প্রদর্শিত হয়। মিডিয়া নিয়ন্ত্রণগুলি দ্রুত সেটিংসের কাছাকাছি উপস্থিত হয়। একাধিক অ্যাপ্লিকেশন থেকে সেশনগুলি একটি সোয়াইপেবল কারাউসলে সাজানো হয় যার মধ্যে ফোনে স্থানীয়ভাবে বাজানো স্ট্রিমগুলি, দূরবর্তী স্ট্রিমগুলি যেমন বাহ্যিক ডিভাইসগুলিতে বা কাস্ট সেশনে সনাক্ত করা এবং পূর্ববর্তী, পুনরায় অঙ্কিত সেশনগুলি শেষের দিকে পুনরায় শুরু করা সেশনগুলি অন্তর্ভুক্ত করে।
ব্যবহারকারীরা অ্যাপটি শুরু না করে কারাউসেল থেকে পূর্ববর্তী সেশনগুলি পুনরায় চালু করতে পারেন। যখন প্লেব্যাক শুরু হয়, ব্যবহারকারী মিডিয়া নিয়ন্ত্রণগুলির সাথে স্বাভাবিক উপায়ে যোগাযোগ করে।
আরও তথ্যের জন্য, মিডিয়া নিয়ন্ত্রণগুলি দেখুন।
পর্দা
জলপ্রপাত প্রদর্শনের জন্য আরও ভাল সমর্থন
অ্যান্ড্রয়েড 11 জলপ্রপাত প্রদর্শনগুলি সমর্থন করার জন্য বেশ কয়েকটি এপিআই সরবরাহ করে, প্রদর্শন করে যা ডিভাইসের প্রান্তের চারপাশে মোড়ানো। এই প্রদর্শনগুলি ডিসপ্লে কাটআউটগুলির সাথে ডিসপ্লেগুলির বৈকল্পিক হিসাবে বিবেচনা করা হয়। বিদ্যমান DisplayCutout
.getSafeInset…()
পদ্ধতিগুলি এখন জলপ্রপাতের পাশাপাশি কাটআউটগুলি এড়াতে নিরাপদ ইনসেটটি ফিরিয়ে দেয়। জলপ্রপাত অঞ্চলে আপনার অ্যাপ্লিকেশন সামগ্রী রেন্ডার করতে, নিম্নলিখিতগুলি করুন:
জলপ্রপাতের ইনসেটের সঠিক মাত্রা পেতে
DisplayCutout.getWaterfallInsets()
কল করুন।উইন্ডো লেআউট অ্যাট্রিবিউট
layoutInDisplayCutoutMode
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
উইন্ডোটি স্ক্রিনের সমস্ত প্রান্তে কাটআউট এবং জলপ্রপাতের অঞ্চলে প্রসারিত করার অনুমতি দেওয়ার জন্য সেট করুন। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কাটআউট বা জলপ্রপাতের অঞ্চলে কোনও প্রয়োজনীয় সামগ্রী নেই।
কব্জা কোণ সেন্সর এবং ভাঁজ
অ্যান্ড্রয়েড 11 কব্জা-ভিত্তিক স্ক্রিন কনফিগারেশন সহ ডিভাইসগুলিতে চলমান অ্যাপ্লিকেশনগুলির পক্ষে TYPE_HINGE_ANGLE
সহ একটি নতুন সেন্সর সরবরাহ করে এবং একটি নতুন SensorEvent
যা কব্জা কোণটি পর্যবেক্ষণ করতে পারে এবং দুটি অবিচ্ছেদ্যতার মধ্যে একটি পরিমাপ সরবরাহ করে তা সম্ভব করে তোলে ডিভাইসের অংশগুলি। ব্যবহারকারী ডিভাইসটি হেরফের করার সাথে সাথে গ্রানুলার অ্যানিমেশনগুলি সম্পাদন করতে আপনি এই কাঁচা পরিমাপগুলি ব্যবহার করতে পারেন।
ভাঁজগুলি দেখুন।
কথোপকথন
কথোপকথনের উন্নতি
অ্যান্ড্রয়েড 11 কথোপকথনগুলি যেভাবে পরিচালনা করা হয় তাতে বেশ কয়েকটি উন্নতি করে। কথোপকথনগুলি হ'ল রিয়েল-টাইম, দুই বা ততোধিক লোকের মধ্যে দ্বি-নির্দেশমূলক যোগাযোগ। এই কথোপকথনগুলিকে বিশেষ বিশিষ্টতা দেওয়া হয় এবং ব্যবহারকারীদের কীভাবে তাদের সাথে ইন্টারঅ্যাক্ট করতে হয় তার বেশ কয়েকটি নতুন বিকল্প রয়েছে।
কথোপকথন এবং আপনার অ্যাপ্লিকেশন কীভাবে তাদের সমর্থন করতে পারে সে সম্পর্কে আরও তথ্যের জন্য লোক এবং কথোপকথনগুলি দেখুন।
চ্যাট বুদবুদ
বুদবুদগুলি এখন সিস্টেম জুড়ে পৃষ্ঠের কথোপকথনগুলিতে সহায়তা করতে বিকাশকারীদের কাছে উপলব্ধ। বুদবুদগুলি অ্যান্ড্রয়েড 10 -এ একটি পরীক্ষামূলক বৈশিষ্ট্য ছিল যা একটি বিকাশকারী বিকল্পের মাধ্যমে সক্ষম হয়েছিল; অ্যান্ড্রয়েড 11 -এ, এটি আর প্রয়োজন নেই।
যদি কোনও অ্যাপ্লিকেশন অ্যান্ড্রয়েড 11 (এপিআই স্তর 30) বা উচ্চতর লক্ষ্য করে তবে এর বিজ্ঞপ্তিগুলি বুদবুদ হিসাবে উপস্থাপিত হয় না যদি না তারা নতুন কথোপকথনের প্রয়োজনীয়তা পূরণ করে। বিশেষত, বিজ্ঞপ্তিটি অবশ্যই একটি শর্টকাটের সাথে যুক্ত হতে হবে।
অ্যান্ড্রয়েড 11 এর আগে, আপনি যদি কোনও বিজ্ঞপ্তি বুদবুদ হতে চান তবে আপনাকে স্পষ্টভাবে উল্লেখ করতে হবে যে বিজ্ঞপ্তিটি সর্বদা ডকুমেন্ট ইউআই মোডে চালু করার জন্য সেট করা হয়েছিল। অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, আপনাকে আর স্পষ্টভাবে সেই সেটিংটি তৈরি করার দরকার নেই; যদি বিজ্ঞপ্তিটি বুদবুদ হয় তবে প্ল্যাটফর্মটি স্বয়ংক্রিয়ভাবে ডকুমেন্ট ইউআই মোডে সর্বদা চালু করার বিজ্ঞপ্তিটি সেট করে।
বুদবুদ পারফরম্যান্সে বেশ কয়েকটি উন্নতি রয়েছে এবং ব্যবহারকারীদের প্রতিটি অ্যাপ্লিকেশন থেকে বুদবুদগুলি সক্ষম ও অক্ষম করতে আরও নমনীয়তা রয়েছে। পরীক্ষামূলক সমর্থন প্রয়োগকারী বিকাশকারীদের জন্য, অ্যান্ড্রয়েড 11 -এ এপিআইগুলিতে কয়েকটি পরিবর্তন রয়েছে:
-
BubbleMetadata.Builder()
কোনও পরামিতি সহ কনস্ট্রাক্টরকে হ্রাস করা হয় না। পরিবর্তে, দুটি নতুন কনস্ট্রাক্টরBubbleMetadata.Builder(PendingIntent, Icon)
বাBubbleMetadata.Builder(String)
এর মধ্যে উভয়ই ব্যবহার করুন। -
BubbleMetadata.Builder(String)
কল করে একটি শর্টকাট আইডি থেকেBubbleMetadata
তৈরি করুন। পাস করা স্ট্রিংটিNotification.Builder
সরবরাহ করা শর্টকাট আইডির সাথে মেলে। -
Icon.createWithContentUri()
, বা নতুন পদ্ধতিতেcreateWithAdaptiveBitmapContentUri()
দিয়ে বুদ্বুদ আইকন তৈরি করুন।
5 জি ভিজ্যুয়াল সূচক
ব্যবহারকারীদের ডিভাইসে 5 জি সূচক প্রদর্শনের তথ্যের জন্য, আপনার ব্যবহারকারীরা যখন 5 জি এ থাকবেন তখন বলুন ।
গোপনীয়তা
অ্যান্ড্রয়েড 11 ব্যবহারকারীর গোপনীয়তা বাড়ানোর জন্য প্রচুর পরিবর্তন এবং বিধিনিষেধের পরিচয় দেয়। আরও জানতে, গোপনীয়তা পৃষ্ঠা দেখুন।
নিরাপত্তা
বায়োমেট্রিক প্রমাণীকরণ আপডেট
আপনার অ্যাপ্লিকেশনটির ডেটার জন্য সুরক্ষার স্তর নিয়ন্ত্রণ করতে আপনাকে সহায়তা করতে, অ্যান্ড্রয়েড 11 বায়োমেট্রিক প্রমাণীকরণের জন্য বেশ কয়েকটি উন্নতি সরবরাহ করে। এই পরিবর্তনগুলি জেটপ্যাক বায়োমেট্রিক লাইব্রেরিতেও উপস্থিত হয়।
প্রমাণীকরণ প্রকার
অ্যান্ড্রয়েড 11 BiometricManager.Authenticators
ইন্টারফেসের সাথে পরিচয় করিয়ে দেয়, যা আপনি আপনার অ্যাপ্লিকেশনটিকে সমর্থন করে এমন প্রকারের প্রকারের ঘোষণা করতে ব্যবহার করতে পারেন।
কোন প্রমাণীকরণের ধরণটি ব্যবহৃত হয়েছিল তা নির্ধারণ করুন
ব্যবহারকারীর প্রমাণীকরণের পরে, আপনি getAuthenticationType()
কল করে একটি ডিভাইস শংসাপত্র বা বায়োমেট্রিক শংসাপত্র ব্যবহার করে ব্যবহারকারী প্রমাণীকরণ করেছেন কিনা তা পরীক্ষা করতে পারেন।
আউটি-পার-ব্যবহার কীগুলির জন্য অতিরিক্ত সমর্থন
অ্যান্ড্রয়েড 11 এথ-পার-ব্যবহার কীগুলি ব্যবহার করে প্রমাণীকরণের জন্য আরও সহায়তা সরবরাহ করে।
অবচয় পদ্ধতি
অ্যান্ড্রয়েড 11 নিম্নলিখিত পদ্ধতিগুলি হ্রাস করে:
-
setDeviceCredentialAllowed()
পদ্ধতি। -
setUserAuthenticationValidityDurationSeconds()
পদ্ধতি। -
canAuthenticate()
এর ওভারলোডেড সংস্করণ যা কোনও যুক্তি নেয় না।
বড় ডেটাসেটের নিরাপদ শেয়ারিং
কিছু পরিস্থিতিতে যেমন মেশিন লার্নিং বা মিডিয়া প্লেব্যাক জড়িত, আপনার অ্যাপ্লিকেশনটি অন্য অ্যাপ্লিকেশন হিসাবে একই বড় ডেটাসেট ব্যবহার করতে চাইতে পারে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, আপনার অ্যাপ্লিকেশন এবং অন্য অ্যাপ্লিকেশনটির প্রত্যেককে একই ডেটাসেটের একটি পৃথক অনুলিপি ডাউনলোড করতে হবে।
ডেটা রিডানডেন্সি হ্রাস করতে সহায়তা করার জন্য, উভয়ই নেটওয়ার্ক এবং ডিস্কে, অ্যান্ড্রয়েড 11 এই বড় ডেটাসেটগুলিকে ভাগ করা ডেটা ব্লবগুলি ব্যবহার করে ডিভাইসে ক্যাশে করার অনুমতি দেয়। ডেটাসেটগুলি ভাগ করে নেওয়ার বিষয়ে আরও জানতে, বড় ডেটাসেটগুলি ভাগ করে নেওয়ার বিষয়ে গভীরতর গাইডটি দেখুন।
ব্যবহারকারীর শংসাপত্রগুলি ছাড়াই একটি ওটিএ পুনরায় চালু করার পরে ফাইল-ভিত্তিক এনক্রিপশন সম্পাদন করুন
ডিভাইসটি একটি ওটিএ আপডেট শেষ করে এবং পুনরায় চালু করার পরে, শংসাপত্রযুক্ত এনক্রিপ্টড কী (সিই) যা শংসাপত্র-সুরক্ষিত স্টোরেজে স্থাপন করা হয় তা অবিলম্বে ফাইল-ভিত্তিক এনক্রিপশন (এফবিই) ক্রিয়াকলাপের জন্য উপলব্ধ। এর অর্থ হ'ল, একটি ওটিএ আপডেটের পরে, আপনার অ্যাপ্লিকেশনটি এমন ক্রিয়াকলাপগুলি পুনরায় শুরু করতে পারে যা ব্যবহারকারী তাদের পিন, প্যাটার্ন বা পাসওয়ার্ড প্রবেশের আগে সিই কীগুলির প্রয়োজন।
কর্মক্ষমতা এবং গুণমান
ওয়্যারলেস ডিবাগিং
অ্যান্ড্রয়েড 11 অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) এর মাধ্যমে আপনার ওয়ার্কস্টেশন থেকে আপনার অ্যাপ্লিকেশনটি ওয়্যারলেসভাবে মোতায়েন এবং ডিবাগ করা সমর্থন করে। উদাহরণস্বরূপ, আপনি আপনার ডিবাগেবল অ্যাপ্লিকেশনটিকে ইউএসবির মাধ্যমে শারীরিকভাবে সংযুক্ত না করে এবং ড্রাইভার ইনস্টলেশন হিসাবে সাধারণ ইউএসবি সংযোগ সমস্যাগুলির সাথে লড়াই না করে একাধিক রিমোট ডিভাইসে আপনার ডিবাগেবল অ্যাপ্লিকেশন স্থাপন করতে পারেন। আরও তথ্যের জন্য, একটি হার্ডওয়্যার ডিভাইসে রান অ্যাপ্লিকেশনগুলি দেখুন।
এডিবি ইনক্রিমেন্টাল এপিকে ইনস্টলেশন
কোনও ডিভাইসে বড় (2 জিবি+) এপিকে ইনস্টল করা দীর্ঘ সময় নিতে পারে, এমনকি যদি কোনও অ্যাপ্লিকেশনটিতে কেবল একটি ছোট পরিবর্তন করা হয়। এডিবি (অ্যান্ড্রয়েড ডিবাগ ব্রিজ) ইনক্রিমেন্টাল এপিকে ইনস্টলেশন ব্যাকগ্রাউন্ডে অবশিষ্ট ডেটা স্ট্রিম করার সময় অ্যাপটি চালু করতে পর্যাপ্ত পরিমাণে ইনস্টল করে এই প্রক্রিয়াটিকে ত্বরান্বিত করে। adb install
এই বৈশিষ্ট্যটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে যদি এটি ডিভাইস দ্বারা সমর্থিত হয় এবং আপনার কাছে সর্বশেষতম এসডিকে প্ল্যাটফর্ম-সরঞ্জাম ইনস্টল করা আছে। যদি এটি সমর্থন না করা হয় তবে ডিফল্ট ইনস্টলেশন পদ্ধতিটি নিঃশব্দে ব্যবহৃত হয়।
বৈশিষ্ট্যটি ব্যবহার করতে নিম্নলিখিত এডিবি কমান্ডটি ব্যবহার করুন। যদি ডিভাইসটি ইনক্রিমেন্টাল ইনস্টলেশন সমর্থন না করে তবে কমান্ডটি ব্যর্থ হয় এবং একটি ভার্বোজ ব্যাখ্যা মুদ্রণ করে।
adb install --incremental
একটি এডিবি ইনক্রিমেন্টাল এপিকে ইনস্টল করার আগে আপনাকে অবশ্যই আপনার এপিকে স্বাক্ষর করতে হবে এবং একটি এপিকে স্বাক্ষর স্কিম ভি 4 ফাইল তৈরি করতে হবে। এই বৈশিষ্ট্যটি কাজ করার জন্য ভি 4 স্বাক্ষর ফাইলটি এপিকে পাশে রাখতে হবে।
নেটিভ মেমরি বরাদ্দকারী ব্যবহার করে ত্রুটি সনাক্তকরণ
জিডাব্লুপি-আসান একটি নেটিভ মেমরি বরাদ্দকারী বৈশিষ্ট্য যা ব্যবহারের পরে-মুক্ত এবং হিপ-বাফার-ওভারফ্লো বাগগুলি খুঁজে পেতে সহায়তা করে। আপনি এই বৈশিষ্ট্যটি বিশ্বব্যাপী বা আপনার অ্যাপ্লিকেশনটির নির্দিষ্ট সাবপ্রসেসের জন্য সক্ষম করতে পারেন। আরও জানতে, জিডব্লিউপি-আসান গাইড দেখুন।
নিউরাল নেটওয়ার্ক এপিআই 1.3
অ্যান্ড্রয়েড 11 নিউরাল নেটওয়ার্কগুলি এপিআই (এনএনএপিআই) প্রসারিত করে এবং উন্নত করে।
নতুন অপারেশন
এনএনএপিআই 1.3 টেনসরফ্লো লাইটের নতুন কোয়ান্টাইজেশন স্কিম সমর্থন করার জন্য একটি নতুন অপারেন্ড টাইপ, TENSOR_QUANT8_ASYMM_SIGNED
সাথে পরিচয় করিয়ে দেয়।
অতিরিক্তভাবে, এনএনএপিআই 1.3 নিম্নলিখিত নতুন ক্রিয়াকলাপগুলির সাথে পরিচয় করিয়ে দেয়:
-
QUANTIZED_LSTM
-
IF
-
WHILE
-
ELU
-
HARD_SWISH
-
FILL
-
RANK
নতুন এমএল নিয়ন্ত্রণ
এনএনএপিআই 1.3 মেশিন লার্নিংকে সুচারুভাবে চলতে সহায়তা করার জন্য নতুন নিয়ন্ত্রণগুলি প্রবর্তন করে:
কিউএস এপিআই: পরিষেবা এপিআইয়ের নতুন মানের নিম্নলিখিত নতুন ফাংশনগুলির সাথে এনএনএপিআই -তে অগ্রাধিকার এবং টাস্কের সময়সীমাগুলির জন্য সমর্থন অন্তর্ভুক্ত রয়েছে:
মেমরি ডোমেন ইনপুট/আউটপুট: এনএনএপিআই 1.3 এ ইনপুট এবং এক্সিকিউশন আউটপুট হিসাবে মেমরি ডোমেনগুলির জন্য সমর্থন অন্তর্ভুক্ত করে। এটি অ্যান্ড্রয়েড নিউরাল নেটওয়ার্কগুলির রানটাইম পারফরম্যান্স উন্নত করে বিভিন্ন সিস্টেমের উপাদানগুলির মধ্যে একই ডেটার অপ্রয়োজনীয় অনুলিপিগুলি সরিয়ে দেয়। এই বৈশিষ্ট্যটি
ANeuralNetworksMemoryDesc
এবংANeuralNetworkMemory
অবজেক্টগুলির সাথে নিম্নলিখিত ফাংশনগুলি সহ ব্যবহারের জন্য নতুন এনডিকে এপিআইগুলির একটি সেট যুক্ত করেছে:-
ANeuralNetworksMemoryDesc_create()
-
ANeuralNetworksMemoryDesc_free()
-
ANeuralNetworksMemoryDesc_addInputRole()
-
ANeuralNetworksMemoryDesc_addOutputRole()
-
ANeuralNetworksMemoryDesc_setDimensions()
-
ANeuralNetworksMemoryDesc_finish()
-
ANeuralNetworksMemory_createFromDesc()
-
ANeuralNetworksMemory_copy()
আরও জানতে, নিউরাল নেটওয়ার্ক মেমরি ডোমেন নমুনা দেখুন।
-
নির্ভরতা এপিআই এবং সিঙ্ক বেড়া সমর্থন: এনএনএপিআই 1.3 এর মধ্যে নির্ভরতা সহ অ্যাসিঙ্ক্রোনাস কম্পিউটারের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে, ছোট শৃঙ্খলিত মডেলগুলি আহ্বান করার সময় ওভারহেডকে হ্রাস করার অনুমতি দেয়। এই বৈশিষ্ট্যটি নিম্নলিখিত নতুন ফাংশন যুক্ত করেছে:
নিয়ন্ত্রণ প্রবাহ: এনএনএপিআই 1.3 এর মধ্যে নতুন গ্রাফ অপারেশনগুলি
ANEURALNETWORKS_IF
এবংANEURALNETWORKS_WHILE
সাথে সাধারণ নিয়ন্ত্রণ প্রবাহের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে, যা নতুনANEURALNETWORKS_MODEL
অপারেন্ড টাইপ ব্যবহার করে অন্যান্য মডেলগুলিকে যুক্তি হিসাবে গ্রহণ করে। অতিরিক্তভাবে, এই বৈশিষ্ট্যটি নিম্নলিখিত নতুন ফাংশনগুলি যুক্ত করেছে:
এনডিকে তাপীয় এপিআই
যখন ডিভাইসগুলি খুব উষ্ণ হয়ে যায়, তারা সিপিইউ এবং/অথবা জিপিইউকে থ্রোটল করতে পারে এবং এটি অপ্রত্যাশিত উপায়ে অ্যাপ্লিকেশনগুলিকে প্রভাবিত করতে পারে। জটিল গ্রাফিক্স, ভারী গণনা, বা টেকসই নেটওয়ার্ক ক্রিয়াকলাপকে অন্তর্ভুক্ত করে এমন অ্যাপ্লিকেশন বা গেমগুলি সমস্যার মুখোমুখি হওয়ার সম্ভাবনা বেশি।
ডিভাইসে তাপমাত্রা পরিবর্তনগুলি নিরীক্ষণ করতে অ্যান্ড্রয়েড 11 এ এনডিকে তাপীয় এপিআই ব্যবহার করুন এবং তারপরে কম পাওয়ার ব্যবহার এবং শীতল ডিভাইসের তাপমাত্রা বজায় রাখতে পদক্ষেপ নিন। এই এপিআই জাভা তাপীয় এপিআইয়ের অনুরূপ; আপনি যে কোনও তাপীয় স্থিতি পরিবর্তনের জন্য বিজ্ঞপ্তিগুলি পেতে বা বর্তমান স্থিতি সরাসরি পোল করতে এটি ব্যবহার করতে পারেন।
পাঠ্য এবং ইনপুট
উন্নত আইএমই ট্রানজিশন
অ্যান্ড্রয়েড 11 ইনপুট পদ্ধতি সম্পাদকদের (আইএমই) যেমন অন-স্ক্রিন কীবোর্ডগুলির মতো ট্রানজিশনগুলি উন্নত করতে নতুন এপিআইদের পরিচয় করিয়ে দেয়। এই এপিআইগুলি আইএমইর উপস্থিতি এবং নিখোঁজ হওয়ার সাথে এবং স্থিতি এবং নেভিগেশন বারগুলির মতো অন্যান্য উপাদানগুলির সাথে আপনার অ্যাপ্লিকেশনটির সামগ্রীকে সিঙ্ক্রোনাইজেশনে সামঞ্জস্য করা সহজ করে তোলে।
কোনও আইএমই দেখানোর জন্য যে কোনও EditText
ফোকাস রয়েছে, কল করুন view.getInsetsController(). show(Type.ime())
। (আপনি এই পদ্ধতিটিকে একই শ্রেণীর মতো একই শ্রেণীর মতো কল করতে পারেন, ফোকাসড EditText
হিসাবে আপনাকে EditText
বিশেষভাবে কল করতে হবে না)) আইএমই আড়াল করতে, কল করুন view.getInsetsController(). hide(Type.ime())
আপনি view.getRootWindowInsets(). isVisible(Type.ime())
আইএমইর উপস্থিতি এবং নিখোঁজ হওয়ার সাথে আপনার অ্যাপ্লিকেশনটির দৃষ্টিভঙ্গিগুলিকে সিঙ্ক্রোনাইজ করার জন্য, একটি WindowInsetsAnimation.Callback
সরবরাহ করে একটি শ্রোতা সেট করুন View.setWindowInsetsAnimationCallback()
(আপনি এই শ্রোতাকে যে কোনও দৃশ্যে সেট করতে পারেন, এটি কোনও EditText
হতে হবে না)) আইএমই আপনার শ্রোতার onPrepare()
পদ্ধতি বলে, তারপরে এটি রূপান্তরটির শুরুতে onStart()
কে কল করে। এরপরে এটি ট্রানজিশনের প্রতিটি অগ্রগতিতে onProgress()
কল করে। যখন ট্রানজিশনটি শেষ হয়ে যায়, আইএমই onEnd()
কল করে। ট্রানজিশনের যে কোনও মুহুর্তে, আপনি WindowInsetsAnimation.getFraction()
কল করে রূপান্তরটি কতটা অগ্রগতি করেছে তা জানতে পারেন।
এই এপিআইগুলি কীভাবে ব্যবহার করবেন তার উদাহরণের জন্য, নতুন উইন্ডোইনসেটনিমেশন কোড নমুনা দেখুন।
আইএমই অ্যানিমেশন নিয়ন্ত্রণ করা
আপনি আইএমই অ্যানিমেশন, বা নেভিগেশন বারের মতো অন্য সিস্টেম বারের অ্যানিমেশন নিয়ন্ত্রণ করতে পারেন। এটি করার জন্য, উইন্ডো ইনসেট পরিবর্তনের জন্য নতুন শ্রোতা সেট করতে প্রথমে 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; } });
আইএমই বা অন্যান্য সিস্টেম বারটি সরানোর জন্য, কন্ট্রোলারের 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() {} });
আইসিইউ লাইব্রেরিগুলিতে আপডেট
অ্যান্ড্রয়েড 11 অ্যান্ড্রয়েড 10 এর সংস্করণ 636 এর তুলনায় আইসিইউ লাইব্রেরির 66 সংস্করণ ব্যবহার করতে android.icu
প্যাকেজটি আপডেট করে।
নতুন লাইব্রেরি সংস্করণগুলিতে উল্লেখযোগ্য পরিবর্তনগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
- অনেকগুলি ফর্ম্যাটিং এপিআই এখন একটি নতুন রিটার্ন অবজেক্ট টাইপ সমর্থন করে যা
FormattedValue
প্রসারিত করে। -
LocaleMatcher
এপিআই একটি বিল্ডার শ্রেণীর সাথে উন্নত করা হয়েছে,java.util.Locale
ধরণের সমর্থন এবং একটি ম্যাচ সম্পর্কে অতিরিক্ত ডেটা বৈশিষ্ট্যযুক্ত একটি ফলাফল শ্রেণি। - ইউনিকোড 13 এখন সমর্থিত।
মিডিয়া
মিডিয়াকোডেক বাফার বরাদ্দ করা
অ্যান্ড্রয়েড 11 এ একটি নতুন MediaCodec
এপিআই অন্তর্ভুক্ত রয়েছে যা ইনপুট এবং আউটপুট বাফার বরাদ্দ করার সময় অ্যাপ্লিকেশনগুলিকে আরও নিয়ন্ত্রণ দেয়। এটি আপনার অ্যাপ্লিকেশনটিকে আরও দক্ষতার সাথে মেমরি পরিচালনা করতে দেয়।
নতুন ক্লাস:
নতুন পদ্ধতি:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
এছাড়াও, MediaCodec.Callback()
এ দুটি পদ্ধতির আচরণ পরিবর্তন হয়েছে:
-
onInputBufferAvailable()
-
MediaCodec.getInputBuffer()
এবংMediaCodec.queueInputBuffer()
সূচকটির সাথে কল করার পরিবর্তে, যদি ব্লক মডেল এপিআই ব্যবহার করার জন্য কনফিগার করা হয়, অ্যাপ্লিকেশনগুলি সূচকটির সাথেMediaCodec.getQueueRequest
ব্যবহার করা উচিত, স্লটটিতে একটি লিনিয়ারব্লক/হার্ডওয়্যারবফার সংযুক্ত করে। -
onOutputBufferAvailable()
- সূচক সহ
MediaCodec.getOutputBuffer()
কল করার পরিবর্তে অ্যাপ্লিকেশনগুলি আরও তথ্য এবং লিনিয়ারব্লক/হার্ডওয়্যারবফার বাফার সহOutputFrame
অবজেক্টটি পেতে সূচক সহMediaCodec.getOutputFrame()
ব্যবহার করতে পারে।
মিডিয়াকোডেক-এ স্বল্প-লেটেন্সি ডিকোডিং
অ্যান্ড্রয়েড 11 গেমস এবং অন্যান্য রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য লো-ল্যাটেন্সি ডিকোডিং সমর্থন করার জন্য MediaCodec
উন্নত করে। আপনি কোনও কোডেক MediaCodecInfo.CodecCapabilities.isFeatureSupported()
এ FEATURE_LowLatency
পাস করে লো-ল্যাটেন্সি ডিকোডিংকে সমর্থন করে কিনা তা পরীক্ষা করতে পারেন।
কম-ল্যাটেন্সি ডিকোডিং চালু বা বন্ধ করতে, নিম্নলিখিতগুলির মধ্যে যে কোনও একটি করুন:
-
MediaCodec.configure()
ব্যবহার করে নতুনKEY_LOW_LATENCY
0 বা 1 এ সেট করুন। -
MediaCodec.setParameters()
ব্যবহার করে নতুন প্যারামিটার কীPARAMETER_KEY_LOW_LATENCY
0 বা 1 এ সেট করুন।
নতুন এওডিও ফাংশন aaudiostream_release ()
ফাংশন AAudioStream_close()
একই সময়ে একটি অডিও স্ট্রিম প্রকাশ করে এবং বন্ধ করে দেয়। এটি বিপজ্জনক হতে পারে। যদি অন্য প্রক্রিয়াটি বন্ধ হওয়ার পরে স্ট্রিমটি অ্যাক্সেস করার চেষ্টা করে তবে প্রক্রিয়াটি ক্রাশ হয়ে যাবে।
নতুন ফাংশন AAudioStream_release()
স্ট্রিমটি প্রকাশ করে তবে এটি বন্ধ করে না। এটি এর সংস্থানগুলি মুক্ত করে এবং প্রবাহকে একটি পরিচিত অবস্থায় ফেলে দেয়। আপনি AAudioStream_close()
কল না করা পর্যন্ত অবজেক্টটি বজায় থাকে।
মিডিয়াপার্সার এপিআই
মিডিয়াপার্সার মিডিয়া নিষ্কাশনের জন্য একটি নতুন নিম্ন স্তরের এপিআই। এটি মিডিয়া এক্সট্র্যাক্টরের চেয়ে আরও নমনীয় এবং মিডিয়া নিষ্কাশন কার্যকারিতার উপর অতিরিক্ত নিয়ন্ত্রণ সরবরাহ করে।
একটি ইউএসবি ডিভাইস থেকে অডিও ক্যাপচার
যখন RECORD_AUDIO
অনুমতি ব্যতীত কোনও অ্যাপ্লিকেশন ইউএসবি অডিও ডিভাইসে অডিও ক্যাপচার সক্ষমতা (যেমন একটি ইউএসবি হেডসেট) সহ সরাসরি অ্যাক্সেসের জন্য অনুরোধ করতে UsbManager
ব্যবহার করে, তখন একটি নতুন সতর্কতা বার্তা ব্যবহারকারীকে ডিভাইসটি ব্যবহারের অনুমতি নিশ্চিত করতে বলছে বলে মনে হচ্ছে। সিস্টেমটি কোনও "সর্বদা ব্যবহার" বিকল্পটিকে উপেক্ষা করে, তাই কোনও অ্যাপ্লিকেশন অ্যাক্সেসের জন্য অনুরোধ করার সময় ব্যবহারকারীকে অবশ্যই সতর্কতা এবং অনুদানের অনুমতি স্বীকার করতে হবে।
এই আচরণটি এড়াতে, আপনার অ্যাপ্লিকেশনটির RECORD_AUDIO
অনুমতিটির জন্য অনুরোধ করা উচিত।
একযোগে মাইক অ্যাক্সেস
অ্যান্ড্রয়েড 11 AudioRecord
, MediaRecorder
এবং AAudioStream
এপিআইগুলিতে নতুন পদ্ধতি যুক্ত করেছে। এই পদ্ধতিগুলি নির্বাচিত ব্যবহারের ক্ষেত্রে নির্বিশেষে একই সাথে ক্যাপচার করার ক্ষমতা সক্ষম করে এবং অক্ষম করে। অডিও ইনপুট ভাগ করে নেওয়া দেখুন।
আউটপুট স্যুইচার
অ্যান্ড্রয়েড 11 অ্যাপ্লিকেশনগুলির জন্য নতুন আচরণ প্রয়োগ করে যা cast
একটি অ্যাপের মধ্যে থেকে কাস্টিং বিকল্পগুলি অ্যাক্সেস করার পাশাপাশি স্যুইচিং বিকল্পগুলি সিস্টেম মিডিয়া প্লেয়ারেও উপস্থিত হয়। এটি ডিভাইসগুলির মধ্যে যখন তাদের দেখার এবং শোনার প্রসঙ্গগুলি পরিবর্তন করে যেমন কোনও ফোনে রান্নাঘরে ভিডিও দেখা বা বাড়ি বা গাড়িতে অডিও শোনার মতো ডিভাইসগুলির মধ্যে চলে যাওয়ার সময় ব্যবহারকারীকে একটি বিরামবিহীন ভ্রমণ দিতে সহায়তা করে। আউটপুট স্যুইচার দেখুন।
সংযোগ
ওয়াই-ফাই পাসপয়েন্ট বর্ধন
অ্যান্ড্রয়েড 11 এ যুক্ত পাসপয়েন্ট সক্ষমতা সম্পর্কিত তথ্যের জন্য, পাসপয়েন্ট দেখুন।
ওয়াই-ফাই পরামর্শ এপিআই প্রসারিত হয়েছে
অ্যান্ড্রয়েড 11 নিম্নলিখিতগুলি সহ আপনার অ্যাপের নেটওয়ার্ক পরিচালনার ক্ষমতা বাড়ানোর জন্য ওয়াই-ফাই পরামর্শ এপিআই প্রসারিত করে:
- সংযোগ ব্যবস্থাপনার অ্যাপ্লিকেশনগুলি সংযোগ বিচ্ছিন্ন করার অনুরোধের অনুমতি দিয়ে তাদের নিজস্ব নেটওয়ার্কগুলি পরিচালনা করতে পারে।
- পাসপয়েন্ট নেটওয়ার্কগুলি পরামর্শ এপিআইতে সংহত করা হয় এবং ব্যবহারকারীর কাছে পরামর্শ দেওয়া যেতে পারে।
- অ্যানালিটিক্স এপিআইগুলি আপনাকে আপনার নেটওয়ার্কগুলির গুণমান সম্পর্কে তথ্য পেতে সক্ষম করে।
কলস্ক্রিনিংস সার্ভিস আপডেট
অ্যান্ড্রয়েড 11 থেকে শুরু করে, একটি কলস্ক্রিনিংস সার্ভিস আগত কলগুলির জন্য আলোড়ন/কাঁপানো যাচাইকরণের স্থিতি (ভার্স্ট্যাট) সম্পর্কে তথ্যের জন্য অনুরোধ করতে পারে। এই তথ্যটি আগত কলগুলির জন্য কল বিশদগুলির অংশ হিসাবে সরবরাহ করা হয়।
যদি কোনও CallScreeningService
READ_CONTACTS
অনুমতি ধরে রাখে তবে ব্যবহারকারীর পরিচিতিগুলির একটি নম্বর থেকে আগত কলগুলি বা বহির্গামী কলগুলি থাকলে অ্যাপটিকে অবহিত করা হয়।
আরও তথ্যের জন্য, কলার আইডি স্পোফিং প্রতিরোধ করুন দেখুন।
মোবাইল এপিআই আপডেটগুলি খুলুন
অ্যান্ড্রয়েড 11 এবং উচ্চতর উপর ওএমএপিআই সমর্থন সম্পর্কিত তথ্যের জন্য, ওপেন মোবাইল এপিআই রিডার সমর্থন দেখুন।
পারফরম্যান্ট ভিপিএনএস
অ্যাপ্লিকেশনগুলি যা এপিআই স্তর 30 এবং উচ্চতর বা এপিআই স্তর 29 এবং উচ্চতরগুলিতে চালু করা ডিভাইসগুলিতে চলছে এমন অ্যাপ্লিকেশনগুলি ব্যবহারকারী-কনফিগার করা এবং অ্যাপ্লিকেশন-ভিত্তিক ভিপিএন উভয়ের জন্য ভিপিএনগুলিতে আইকেইভি 2/আইপিএসইসি প্রয়োগ করতে পারে।
ভিপিএনগুলি অপারেটিং সিস্টেমে স্থানীয়ভাবে চালিত হয়, একটি অ্যাপ্লিকেশনটিতে আইকেইভি 2/আইপিএসইসি ভিপিএন সংযোগ স্থাপনের জন্য প্রয়োজনীয় কোডটি সহজ করে।
প্রতি প্রক্রিয়া নেটওয়ার্ক অ্যাক্সেস নিয়ন্ত্রণ
প্রতি প্রক্রিয়া ভিত্তিতে নেটওয়ার্ক অ্যাক্সেস সক্ষম করার তথ্যের জন্য, নেটওয়ার্ক ব্যবহার পরিচালনা করুন দেখুন।
একই এফকিউডিএন সহ একাধিক ইনস্টল করা পাসপয়েন্ট কনফিগারেশনের অনুমতি দিন
অ্যান্ড্রয়েড 11 থেকে শুরু করে, আপনি PasspointConfiguration.getUniqueId()
ব্যবহার করতে পারেন PasspointConfiguration
অবজেক্টের জন্য একটি অনন্য আইডেন্টিফায়ার পেতে, যা আপনার অ্যাপের ব্যবহারকারীদের একই সম্পূর্ণরূপে যোগ্য ডোমেন নাম (এফকিউডিএন) দিয়ে একাধিক প্রোফাইল ইনস্টল করতে সক্ষম করে।
এই কার্যকারিতাটি সহায়ক যখন কোনও ক্যারিয়ার তাদের নেটওয়ার্কে মোবাইল কান্ট্রি কোড (এমসিসি) এবং মোবাইল নেটওয়ার্ক কোড (এমএনসি) এর একাধিক সংমিশ্রণ স্থাপন করে তবে কেবল একটি একক এফকিউডিএন রয়েছে। অ্যান্ড্রয়েড 11 এবং উচ্চতর, একই এফকিউডিএন দিয়ে একাধিক প্রোফাইল ইনস্টল করা সম্ভব যা ব্যবহারকারী এমসিসি বা এমএনসি উভয়ই একটি সিম ইনস্টল করার সময় হোম সরবরাহকারী হিসাবে নেটওয়ার্কের সাথে মেলে।
জিএনএসএস অ্যান্টেনা সমর্থন
অ্যান্ড্রয়েড 11 GnssAntennaInfo
শ্রেণীর পরিচয় করিয়ে দেয়, যা আপনার অ্যাপ্লিকেশনটির পক্ষে গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (জিএনএসএস) সরবরাহ করতে পারে এমন সেন্টিমিটার-নির্ভুলতার অবস্থানের আরও বেশি ব্যবহার করা সম্ভব করে তোলে।
অ্যান্টেনা ক্রমাঙ্কন সম্পর্কিত তথ্য সম্পর্কিত গাইডে আরও জানুন।
গ্রাফিক্স
এনডিকে ইমেজ ডিকোডার
এনডিকে ImageDecoder
এপিআই সরাসরি চিত্রগুলি ডিকোড করার জন্য অ্যান্ড্রয়েড সি/সি ++ অ্যাপ্লিকেশনগুলির জন্য একটি স্ট্যান্ডার্ড এপিআই সরবরাহ করে। অ্যাপ বিকাশকারীদের আর ফ্রেমওয়ার্ক এপিআই (জেএনআইয়ের মাধ্যমে) বা তৃতীয় পক্ষের চিত্র-ডিকোডিং লাইব্রেরি বান্ডিল ব্যবহার করার দরকার নেই। আরও তথ্যের জন্য, চিত্র ডিকোডার বিকাশকারী গাইড দেখুন।
ফ্রেম রেট এপিআই
অ্যান্ড্রয়েড 11 একটি এপিআই সরবরাহ করে যা অ্যাপ্লিকেশনগুলিকে তাদের উদ্দেশ্যে ফ্রেম রেট সিস্টেমকে অবহিত করতে সক্ষম করে, একাধিক রিফ্রেশ হারকে সমর্থন করে এমন ডিভাইসগুলিতে বিচারককে হ্রাস করতে। এই এপিআই কীভাবে ব্যবহার করবেন সে সম্পর্কে তথ্যের জন্য, ফ্রেম রেট গাইড দেখুন।
অনুরোধ এবং কম লেটেন্সি সমর্থন জন্য পরীক্ষা করা
কিছু প্রদর্শনগুলি গ্রাফিক্স পোস্ট-প্রসেসিং সম্পাদন করতে পারে, যেমন কিছু বাহ্যিক প্রদর্শন এবং টিভি। এই পোস্ট-প্রসেসিং গ্রাফিকগুলি উন্নত করে তবে বিলম্বতা বাড়িয়ে তুলতে পারে। এইচডিএমআই ২.১ সমর্থন করে এমন নতুন প্রদর্শনগুলিতে একটি অটো লো ল্যাটেন্সি মোড রয়েছে ( এলএম , এটি গেম মোড নামেও পরিচিত), যা এই পোস্ট-প্রসেসিংটি স্যুইচ করে বিলম্বকে হ্রাস করে। অলএম সম্পর্কিত আরও তথ্যের জন্য, এইচডিএমআই 2.1 স্পেসিফিকেশনটি দেখুন।
একটি উইন্ডো অনুরোধ করতে পারে যে এটি উপলব্ধ থাকলে অটো লো ল্যাটেন্সি মোড ব্যবহার করা উচিত। অলএম গেমস এবং ভিডিও কনফারেন্সিংয়ের মতো অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে কার্যকর, যেখানে সর্বোত্তম সম্ভাব্য গ্রাফিক্স থাকার চেয়ে কম লেটেন্সি বেশি গুরুত্বপূর্ণ।
ন্যূনতম পোস্ট-প্রসেসিং চালু বা বন্ধ টগল করতে, Window.setPreferMinimalPostProcessing()
, বা উইন্ডোর preferMinimalPostProcessing
অ্যাট্রিবিউটটি true
সেট করুন। সমস্ত প্রদর্শন ন্যূনতম পোস্ট প্রসেসিং সমর্থন করে না; কোনও নির্দিষ্ট ডিসপ্লে এটি সমর্থন করে কিনা তা জানতে, নতুন পদ্ধতিটি Display.isMinimalPostProcessingSupported()
করুন Call
পারফরম্যান্ট গ্রাফিক্স ডিবাগ স্তর ইনজেকশন
অ্যাপ্লিকেশনগুলি এখন বহিরাগত গ্রাফিক্স স্তরগুলি ( জিএলইএস , ভলকান ) লোড করতে পারে দেশীয় অ্যাপ্লিকেশন কোডে ডিবাগেবল অ্যাপ্লিকেশন হিসাবে একই কার্যকারিতা প্রকাশ করতে, তবে পারফরম্যান্স ওভারহেড ব্যয় না করে। GAPID এর মতো সরঞ্জামগুলির সাথে আপনার অ্যাপ্লিকেশনটি প্রোফাইল দেওয়ার সময় এই বৈশিষ্ট্যটি বিশেষত গুরুত্বপূর্ণ। আপনার অ্যাপ্লিকেশনটি প্রোফাইল করতে, অ্যাপ্লিকেশনটিকে ডিবাগেবল করার পরিবর্তে আপনার অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইলে নিম্নলিখিত মেটা-ডেটা উপাদানটি অন্তর্ভুক্ত করুন:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
চিত্র এবং ক্যামেরা
সক্রিয় ক্যাপচারের সময় নিঃশব্দ বিজ্ঞপ্তি শব্দ এবং কম্পন
অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, যখন সক্রিয়ভাবে ক্যামেরাটি ব্যবহার করে, আপনার অ্যাপ্লিকেশনটি কেবল কম্পনগুলি, শব্দ এবং কম্পন উভয়ই নিঃশব্দ করতে পারে বা setCameraAudioRestriction()
ব্যবহার করে না।
অ্যান্ড্রয়েড এমুলেটরটিতে প্রসারিত ক্যামেরা সমর্থন
অ্যান্ড্রয়েড 11 দিয়ে শুরু হওয়া এমুলেটরে ক্যামেরাগুলির জন্য প্রসারিত সহায়তার তথ্যের জন্য, ক্যামেরা সমর্থন দেখুন।
একাধিক ক্যামেরার একযোগে ব্যবহারের জন্য সমর্থন
অ্যান্ড্রয়েড 11 এপিআইগুলিকে একবারে একাধিক ক্যামেরা ব্যবহার করার জন্য সমর্থন জিজ্ঞাসা করতে এপিআই যুক্ত করেছে, উভয়ই সামনের মুখোমুখি এবং রিয়ার-ফেসিং ক্যামেরা সহ।
আপনার অ্যাপ্লিকেশনটি যে ডিভাইসে চলছে সেটিতে সমর্থন যাচাই করতে, নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
-
getConcurrentCameraIds()
ক্যামেরা আইডির সংমিশ্রণের একটিSet
ফেরত দেয় যা একই অ্যাপ্লিকেশন প্রক্রিয়া দ্বারা কনফিগার করা হলে গ্যারান্টিযুক্ত স্ট্রিম সংমিশ্রণের সাথে একই সাথে স্ট্রিম করতে পারে। -
isConcurrentSessionConfigurationSupported()
প্রশ্নগুলি ক্যামেরা ডিভাইসগুলি একই সাথে সংশ্লিষ্ট সেশন কনফিগারেশনগুলিকে সমর্থন করতে পারে কিনা তা প্রশ্নগুলি।
একাধিক ফ্রেম সহ হিফ চিত্রগুলির জন্য আরও ভাল সমর্থন
অ্যান্ড্রয়েড 11 দিয়ে শুরু করে, আপনি যদি ImageDecoder.decodeDrawable()
কল করেন এবং ফ্রেমের ক্রমযুক্ত একটি হাইফ চিত্রটি পাস করেন (যেমন একটি অ্যানিমেশন বা ফেটে ছবি), পদ্ধতিটি পুরো চিত্রের ক্রমযুক্ত একটি AnimatedImageDrawable
ফেরত দেয়। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, পদ্ধতিটি কেবল একটি একক ফ্রেমের BitmapDrawable
ফিরে এসেছিল।
যদি হাইফ গ্রাফিকটিতে একাধিক ফ্রেম থাকে যা কোনও ক্রমের মধ্যে নেই, আপনি MediaMetadataRetriever.getImageAtIndex()
কল করে একটি পৃথক ফ্রেম পুনরুদ্ধার করতে পারেন।
অ্যাক্সেসযোগ্যতা
অ্যাক্সেসযোগ্যতা পরিষেবা বিকাশকারীদের জন্য আপডেটগুলি
আপনি যদি একটি কাস্টম অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করেন তবে আপনি অ্যান্ড্রয়েড 11 এ নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:
- অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারীর মুখোমুখি ব্যাখ্যা এখন সাধারণ পাঠ্য ছাড়াও এইচটিএমএল এবং চিত্রগুলির জন্য অনুমতি দেয়। এই নমনীয়তাটি আপনার পরিষেবাটি কী করে এবং কীভাবে এটি তাদের সহায়তা করতে পারে তা শেষ-ব্যবহারকারীদের ব্যাখ্যা করা সহজ করে তোলে।
- কোনও ইউআই এলিমেন্টের রাজ্যের বিবরণ নিয়ে কাজ করতে যা
contentDescription
চেয়ে বেশি শব্দার্থগতভাবে অর্থবহ অর্থবহ,getStateDescription()
পদ্ধতিতে কল করুন। - সেই স্পর্শ ইভেন্টগুলি সিস্টেমের স্পর্শ এক্সপ্লোরারকে বাইপাস করার জন্য অনুরোধ করার জন্য, কল করুন
setTouchExplorationPassthroughRegion()
। একইভাবে, অঙ্গভঙ্গিগুলি সিস্টেমের অঙ্গভঙ্গি ডিটেক্টরকে বাইপাস করার জন্য অনুরোধ করার জন্য, কল করুনsetGestureDetectionPassthroughRegion()
। - আপনি আইএমই ক্রিয়াগুলির জন্য অনুরোধ করতে পারেন, যেমন "এন্টার" এবং "নেক্সট", পাশাপাশি উইন্ডোজের স্ক্রিনশটগুলি যা
FLAG_SECURE
পতাকা সক্ষম করে না।
অতিরিক্ত বৈশিষ্ট্য
অ্যাপ প্রক্রিয়া প্রস্থান কারণ
অ্যান্ড্রয়েড 11 ActivityManager.getHistoricalProcessExitReasons()
পরিচয় করিয়ে দেয়। অ্যাপ্লিকেশনগুলি ক্র্যাশ ডায়াগনস্টিক তথ্য সংগ্রহ করতে এই পদ্ধতিটি ব্যবহার করতে পারে, যেমন কোনও প্রক্রিয়া সমাপ্তি এএনআরএস, মেমরি সমস্যা বা অন্যান্য কারণে হয় কিনা। অতিরিক্তভাবে, আপনি পরবর্তী বিশ্লেষণের জন্য কাস্টম রাষ্ট্রের তথ্য সঞ্চয় করতে নতুন setProcessStateSummary()
পদ্ধতিটি ব্যবহার করতে পারেন।
getHistoricalProcessExitReasons()
পদ্ধতিটি ApplicationExitInfo
শ্রেণীর উদাহরণগুলি ফেরত দেয়, এতে কোনও অ্যাপ্লিকেশন প্রক্রিয়াটির মৃত্যুর সাথে সম্পর্কিত তথ্য রয়েছে। এই শ্রেণীর একটি উদাহরণে getReason()
কল করে আপনি নির্ধারণ করতে পারেন যে আপনার অ্যাপের প্রক্রিয়াটি কেন হত্যা করা হয়েছিল। উদাহরণস্বরূপ, REASON_CRASH
একটি রিটার্ন মান নির্দেশ করে যে আপনার অ্যাপ্লিকেশনটিতে একটি অনাবৃত ব্যতিক্রম ঘটেছে। যদি আপনার অ্যাপ্লিকেশনটিকে প্রস্থান ইভেন্টগুলির জন্য স্বতন্ত্রতা নিশ্চিত করার প্রয়োজন হয় তবে এটি একটি অ্যাপ্লিকেশন-নির্দিষ্ট শনাক্তকারী বজায় রাখতে পারে, যেমন getTimestamp()
পদ্ধতি থেকে টাইমস্ট্যাম্পের উপর ভিত্তি করে একটি হ্যাশ মান।
অতিরিক্ত সম্পদ
আরও তথ্যের জন্য, অ্যাপ্লিকেশনগুলিকে আরও ব্যক্তিগত এবং মিডিয়ামে স্থিতিশীল করতে নতুন অ্যান্ড্রয়েড 11 সরঞ্জাম সম্পর্কে নিবন্ধটি পড়ুন।
রিসোর্স লোডার
অ্যান্ড্রয়েড 11 একটি নতুন এপিআই প্রবর্তন করে যা অ্যাপ্লিকেশনগুলিকে গতিশীলভাবে প্রসারিত করতে দেয় যেগুলি কীভাবে সংস্থানগুলি অনুসন্ধান এবং লোড করা হয়। নতুন এপিআই ক্লাস ResourcesLoader
এবং ResourcesProvider
মূলত নতুন কার্যকারিতা সরবরাহের জন্য দায়বদ্ধ। একসাথে, তারা অতিরিক্ত সংস্থান এবং সম্পদ সরবরাহ করার ক্ষমতা সরবরাহ করে বা বিদ্যমান সংস্থান এবং সম্পদের মানগুলি সংশোধন করে।
ResourcesLoader
অবজেক্টগুলি এমন পাত্রে যা কোনও অ্যাপ্লিকেশনগুলির Resources
ResourcesProvider
অবজেক্ট সরবরাহ করে। পরিবর্তে, ResourcesProvider
অবজেক্টগুলি APKS এবং সংস্থান টেবিলগুলি থেকে রিসোর্স ডেটা লোড করার পদ্ধতি সরবরাহ করে।
এই এপিআইয়ের জন্য একটি প্রাথমিক ব্যবহারের কেস হ'ল কাস্টম সম্পদ লোডিং। আপনি ফাইল-ভিত্তিক সংস্থান এবং সম্পদগুলির রেজোলিউশনকে পুনর্নির্দেশ করে এমন একটি ResourcesProvider
তৈরি করতে loadFromDirectory()
ব্যবহার করতে পারেন যা অ্যাপ্লিকেশন এপিকে না করে একটি নির্দিষ্ট ডিরেক্টরি অনুসন্ধান করতে পারে। আপনি এপিকে -তে বান্ডিল সম্পদগুলির মতো, AssetManager
এপিআই ক্লাস থেকে open()
পদ্ধতির পরিবারের মাধ্যমে এই সম্পদগুলি অ্যাক্সেস করতে পারেন।
এপিকে স্বাক্ষর স্কিম ভি 4
অ্যান্ড্রয়েড 11 এপিকে স্বাক্ষর স্কিম ভি 4 এর জন্য সমর্থন যুক্ত করে। এই স্কিমটি একটি পৃথক ফাইলে ( apk-name .apk.idsig
) একটি নতুন ধরণের স্বাক্ষর তৈরি করে তবে অন্যথায় ভি 2 এবং ভি 3 এর মতো। এপিকে কোনও পরিবর্তন করা হয় না। এই স্কিমটি এডিবি ইনক্রিমেন্টাল এপিকে ইনস্টলেশন সমর্থন করে, যা এপিকে ইনস্টল করার গতি দেয়।
গতিশীল অভিপ্রায় ফিল্টার
অভিপ্রায় গ্রহণের জন্য, একটি অ্যাপ্লিকেশন অবশ্যই সংকলন সময়ে ঘোষণা করতে হবে যে এটি অ্যাপ্লিকেশন ম্যানিফেস্টে একটি অভিপ্রায় ফিল্টার সংজ্ঞায়িত করে কোন ধরণের ডেটা গ্রহণ করতে সক্ষম। অ্যান্ড্রয়েড 10 এবং নিম্নে, অ্যাপ্লিকেশনগুলির রানটাইমে তাদের অভিপ্রায় ফিল্টারগুলি পরিবর্তন করার কোনও উপায় নেই। এটি ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলির জন্য সমস্যা (যেমন ভার্চুয়াল মেশিন এবং রিমোট ডেস্কটপস) কারণ তাদের মধ্যে ব্যবহারকারীরা কোন সফ্টওয়্যার ইনস্টল করবেন ঠিক তা জানার কোনও উপায় তাদের নেই।
অ্যান্ড্রয়েড 11 মাইম গ্রুপগুলির সাথে পরিচয় করিয়ে দেয়, একটি নতুন ম্যানিফেস্ট উপাদান যা একটি অ্যাপ্লিকেশনটিকে একটি উদ্দেশ্য ফিল্টারে মাইম প্রকারের একটি গতিশীল সেট ঘোষণা করতে এবং রানটাইমে প্রোগ্রামিকভাবে এটি সংশোধন করতে দেয়। একটি মাইম গ্রুপ ব্যবহার করতে, নতুন 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
অ্যাট্রিবিউট একটি স্বেচ্ছাসেবী স্ট্রিং আইডি যা রানটাইমে মাইম গ্রুপকে চিহ্নিত করে। আপনি PackageManager
এপিআই ক্লাসে নিম্নলিখিত নতুন পদ্ধতিতে আইডিটি পাস করে কোনও মাইম গ্রুপের বিষয়বস্তু অ্যাক্সেস এবং আপডেট করতে পারেন:
আপনি যখন কোনও মাইম গ্রুপকে প্রোগ্রামেটিকভাবে একটি মাইম টাইপ যুক্ত করেন, তখন এটি ম্যানিফেস্টে স্পষ্টভাবে ঘোষিত স্ট্যাটিক মাইম টাইপের মতো ঠিক একই কাজ করে।
অটোফিল বর্ধন
অ্যান্ড্রয়েড 11 অটোফিল পরিষেবাগুলির জন্য উন্নতির পরিচয় দেয়।
অ্যাসিস্ট্রাকচার.ভিউনোডে ইঙ্গিত সনাক্তকারী
এটি প্রায়শই অটোফিল পরিষেবাগুলির জন্য ভিউয়ের বৈশিষ্ট্যগুলির উপর ভিত্তি করে একটি ভিউয়ের জন্য একটি স্বাক্ষর হ্যাশ গণনা করা কার্যকর। স্বাক্ষর হ্যাশ গণনা করার সময় ভিউ ইঙ্গিতটি একটি বিশেষ ভাল সম্পত্তি অন্তর্ভুক্ত করার জন্য একটি ভাল সম্পত্তি, তবে ইঙ্গিত স্ট্রিংটি ফোনের লোকেল দিয়ে পরিবর্তিত হতে পারে। এই সমস্যাটি সমাধান করার জন্য, অ্যান্ড্রয়েড 11 একটি নতুন getHintIdEntry()
পদ্ধতির সাথে AssistStructure.ViewNode
প্রসারিত করে, যা কোনও ভিউয়ের ইঙ্গিত পাঠ্যের জন্য রিসোর্স আইডেন্টিফায়ারকে ফিরিয়ে দেয়। এই পদ্ধতিটি একটি লোকেল-স্বতন্ত্র মান সরবরাহ করে যা আপনি স্বাক্ষর হ্যাশগুলি গণনা করতে ব্যবহার করতে পারেন।
ডেটাসেটগুলি ইভেন্টগুলি দেখানো হয়েছে
অটোফিল পরিষেবাগুলিকে তাদের পরামর্শগুলি উন্নত করতে সহায়তা করার জন্য, অ্যান্ড্রয়েড 11 কেসগুলি সনাক্ত করার একটি উপায় সরবরাহ করে যেখানে একটি অটোফিল পরিষেবা ডেটাসেট উপস্থাপন করে তবে ব্যবহারকারী সেগুলির কোনওটি নির্বাচন করেনি। অ্যান্ড্রয়েড 11 -এ, FillEventHistory
একটি নতুন TYPE_DATASETS_SHOWN
ইভেন্টের ধরণের প্রতিবেদন করেছে। যখনই অটোফিল পরিষেবা ব্যবহারকারীর কাছে এক বা একাধিক ডেটাসেট উপস্থাপন করে তখন FillEventHistory
এই ধরণের একটি ইভেন্ট লগ করে। অটোফিল পরিষেবাগুলি এই ইভেন্টগুলি বিদ্যমান TYPE_DATASET_SELECTED
ইভেন্টের সাথে একত্রে ব্যবহার করতে পারে যাতে ব্যবহারকারী সরবরাহিত কোনও অটোফিল বিকল্প নির্বাচন করেছেন কিনা তা নির্ধারণ করতে।
আইএমই ইন্টিগ্রেশন
কীবোর্ড এবং অন্যান্য আইএমইগুলি এখন ড্রপ-ডাউন মেনুতে পরিবর্তে কোনও পরামর্শ স্ট্রিপ বা অনুরূপ ইন্টারফেসে অটোফিল পরামর্শগুলি ইনলাইন প্রদর্শন করতে পারে। পাসওয়ার্ড এবং ক্রেডিট-কার্ড সংখ্যার মতো সংবেদনশীল তথ্য সুরক্ষার জন্য, পরামর্শগুলি ব্যবহারকারীর কাছে প্রদর্শিত হয় তবে ব্যবহারকারী একটি নির্বাচন না করা পর্যন্ত আইএমইতে জানা যায় না। আইএমই এবং পাসওয়ার্ড পরিচালকরা কীভাবে এই বৈশিষ্ট্যটিকে সমর্থন করতে পারে সে সম্পর্কিত তথ্যের জন্য, কীবোর্ডগুলির সাথে অটোফিলকে সংহতকরণ দেখুন।
সামগ্রী ক্যাপচার পরিষেবার সাথে ডেটা ভাগ করে নেওয়া
অ্যান্ড্রয়েড 11 থেকে শুরু করে, আপনার অ্যাপ্লিকেশনটি ডিভাইসের সামগ্রী ক্যাপচার পরিষেবার সাথে ডেটা ভাগ করতে পারে। এই ক্ষমতাটি কোনও ডিভাইসের পক্ষে কনটেক্সট বুদ্ধি সরবরাহ করা সহজ করে তোলে, যেমন বর্তমানে ব্যবহারকারীর পরিবেশে খেলছে এমন একটি গানের নাম দেখানো।
আপনার অ্যাপ্লিকেশন থেকে ডেটা সামগ্রী ক্যাপচার পরিষেবাতে উপলব্ধ করতে, ContentCaptureManager
উদাহরণে shareData()
পদ্ধতিতে কল করুন। যদি সিস্টেমটি ডেটা ভাগ করে নেওয়ার অনুরোধটি গ্রহণ করে তবে আপনার অ্যাপ্লিকেশনটি সামগ্রী ক্যাপচার পরিষেবার সাথে ভাগ করে নেওয়ার জন্য কেবল একটি লেখার ফাইল বর্ণনাকারী গ্রহণ করে।
অ্যান্ড্রয়েড 11 বিকাশকারীদের জন্য দুর্দান্ত নতুন বৈশিষ্ট্য এবং এপিআই প্রবর্তন করে। নীচের বিভাগগুলি আপনাকে আপনার অ্যাপ্লিকেশনগুলির বৈশিষ্ট্যগুলি সম্পর্কে জানতে এবং সম্পর্কিত এপিআই দিয়ে শুরু করতে সহায়তা করে।
নতুন, পরিবর্তিত, এবং অপসারণ এপিআইগুলির বিশদ তালিকার জন্য, এপিআই ডিফ রিপোর্টটি পড়ুন। নতুন এপিআই সম্পর্কিত বিশদগুলির জন্য অ্যান্ড্রয়েড এপিআই রেফারেন্স দেখুন - নতুন এপিআইগুলি দৃশ্যমানতার জন্য হাইলাইট করা হয়েছে। এছাড়াও, প্ল্যাটফর্মের পরিবর্তনগুলি আপনার অ্যাপ্লিকেশনগুলিকে প্রভাবিত করতে পারে এমন অঞ্চলগুলি সম্পর্কে জানতে, অ্যান্ড্রয়েড আর এবং সমস্ত অ্যাপ্লিকেশনগুলির জন্য এবং গোপনীয়তার পরিবর্তনের জন্য লক্ষ্যযুক্ত অ্যাপ্লিকেশনগুলির জন্য অ্যান্ড্রয়েড 11 আচরণের পরিবর্তনগুলি পরীক্ষা করে দেখুন।
নতুন অভিজ্ঞতা
ডিভাইস নিয়ন্ত্রণ
অ্যান্ড্রয়েড 11 এ একটি নতুন ControlsProviderService
এপিআই অন্তর্ভুক্ত রয়েছে যা আপনি সংযুক্ত, বাহ্যিক ডিভাইসের জন্য নিয়ন্ত্রণগুলি প্রকাশ করতে ব্যবহার করতে পারেন। এই নিয়ন্ত্রণগুলি অ্যান্ড্রয়েড পাওয়ার মেনুতে ডিভাইস নিয়ন্ত্রণের অধীনে উপস্থিত হয়। আরও তথ্যের জন্য, বাহ্যিক ডিভাইসগুলি নিয়ন্ত্রণ করুন।
মিডিয়া কন্ট্রোল
Android 11 updates how media controls are displayed. Media controls appear near quick settings. Sessions from multiple apps are arranged in a swipeable carousel which includes streams playing locally on the phone, remote streams, such as those detected on external devices or cast sessions, and previous, resumable sessions in the order they were last played.
Users can restart previous sessions from the carousel without having to start the app. When playback begins, the user interacts with the media controls in the usual way.
For more information, see media controls .
পর্দা
Better support for waterfall displays
Android 11 provides several APIs to support waterfall displays , displays which wrap around the edge of the device. These displays are treated as a variant of displays with display cutouts. The existing DisplayCutout
.getSafeInset…()
methods now return the safe inset to avoid waterfall areas as well as cutouts. To render your app content in the waterfall area, do the following:
Call
DisplayCutout.getWaterfallInsets()
to get exact dimensions of the waterfall inset.Set the window layout attribute
layoutInDisplayCutoutMode
toLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
to allow the window to extend into the cutout and waterfall areas on all edges of the screen. You must make sure that no essential content is in the cutout or waterfall areas.
Hinge angle sensor and foldables
Android 11 makes it possible for apps running on devices with hinge-based screen configurations to determine the angle of the hinge by providing a new sensor with TYPE_HINGE_ANGLE
, and a new SensorEvent
that can monitor the hinge angle and provides a measurement in degrees between two integral parts of the device. You can use these raw measurements to perform granular animations as the user manipulates the device.
See Foldables .
কথোপকথন
Conversation improvements
Android 11 makes a number of improvements to the way conversations are handled. Conversations are real-time, bidirectional communications between two or more people. These conversations are given special prominence, and users have several new options in how to interact with them.
For more information about conversations and how your app can support them, see People and conversations .
চ্যাট বুদবুদ
Bubbles are now available to developers to help surface conversations across the system. Bubbles was an experimental feature in Android 10 that was enabled through a developer option; in Android 11, this is no longer necessary.
If an app targets Android 11 (API level 30) or higher, its notifications are not presented as bubbles unless they fulfill the new conversation requirements . Specifically, the notification must be associated with a shortcut.
Prior to Android 11, if you wanted a notification to be bubbled, you needed to explicitly specify that the notification was set to always launch in document UI mode. Beginning with Android 11, you no longer need to explicitly make that setting; if the notification is bubbled, the platform automatically sets the notification to always launch in document UI mode.
There are a number of improvements to bubble performance, and users have more flexibility in enabling and disabling bubbles from each app. For developers who implemented experimental support, there are a few changes to the APIs in Android 11:
- The
BubbleMetadata.Builder()
constructor with no parameters is deprecated. Instead, use either of the two new constructorsBubbleMetadata.Builder(PendingIntent, Icon)
orBubbleMetadata.Builder(String)
. - Create
BubbleMetadata
from a shortcut ID by callingBubbleMetadata.Builder(String)
. The string passed should match the shortcut ID provided toNotification.Builder
. - Create bubble icons with
Icon.createWithContentUri()
, or with the new methodcreateWithAdaptiveBitmapContentUri()
.
5G visual indicators
For information on displaying 5G indicators on users' devices, see Tell your users when they're on 5G .
গোপনীয়তা
Android 11 introduces a large number of changes and restrictions to enhance user privacy. To learn more, see the Privacy page.
নিরাপত্তা
Biometric authentication updates
To help you control the level of security for your app's data, Android 11 provides several improvements to biometric authentication. These changes also appear in the Jetpack Biometric library .
প্রমাণীকরণ প্রকার
Android 11 introduces the BiometricManager.Authenticators
interface, which you can use to declare the types of authentication that your app supports .
Determine which authentication type was used
ব্যবহারকারীর প্রমাণীকরণের পরে, আপনি getAuthenticationType()
কল করে একটি ডিভাইস শংসাপত্র বা বায়োমেট্রিক শংসাপত্র ব্যবহার করে ব্যবহারকারী প্রমাণীকরণ করেছেন কিনা তা পরীক্ষা করতে পারেন।
Additional support for auth-per-use keys
Android 11 provides more support for authentication using auth-per-use keys .
Deprecated methods
Android 11 deprecates the following methods:
- The
setDeviceCredentialAllowed()
method. - The
setUserAuthenticationValidityDurationSeconds()
method. - The overloaded version of
canAuthenticate()
that takes no arguments.
বড় ডেটাসেটের নিরাপদ শেয়ারিং
In some situations, such as those that involve machine learning or media playback, your app might want to use the same large dataset as another app. In previous versions of Android, your app and another app would each need to download a separate copy of the same dataset.
To help reduce data redundancy, both over the network and on disk, Android 11 allows these large datasets to be cached on the device using shared data blobs . To learn more about sharing datasets, see the in-depth guide on sharing large datasets .
Perform file-based encryption after an OTA restart without user credentials
After the device completes an OTA update and restarts, the Credential Encrypted keys (CE) that are placed in credential-protected storage are immediately available for File-Based Encryption (FBE) operations. This means that, after an OTA update, your app can resume operations that require the CE keys before the user enters their PIN, pattern, or password.
কর্মক্ষমতা এবং গুণমান
ওয়্যারলেস ডিবাগিং
Android 11 supports deploying and debugging your app wirelessly from your workstation via Android Debug Bridge (adb). For example, you can deploy your debuggable app to multiple remote devices without physically connecting your device via USB and contending with common USB connection issues, such as driver installation. For more information, see Run apps on a hardware device .
ADB Incremental APK installation
Installing large (2GB+) APKs on a device can take a long time, even if only a small change is made to an app. ADB (Android Debug Bridge) Incremental APK installation accelerates this process by installing enough of the APK to launch the app while streaming the remaining data in the background. adb install
will use this feature automatically if it is supported by the device and you have the latest SDK Platform-Tools installed. If it is not supported, the default installation method is silently used.
Use the following adb command to use the feature. If the device does not support incremental installation, the command fails and prints a verbose explanation.
adb install --incremental
Before running an ADB incremental APK install, you must sign your APK and create an APK Signature Scheme v4 file . The v4 signature file must be placed next to the APK for this feature to work.
Error detection using the native memory allocator
GWP-ASan is a native memory allocator feature that helps find use-after-free and heap-buffer-overflow bugs. You can enable this feature globally or for specific subprocesses of your app. To learn more, see the GWP-Asan guide .
Neural Networks API 1.3
Android 11 expands and improves the Neural Networks API (NNAPI) .
New operations
NNAPI 1.3 introduces a new operand type, TENSOR_QUANT8_ASYMM_SIGNED
, to support TensorFlow Lite's new quantization scheme .
Additionally, NNAPI 1.3 introduces the following new operations:
-
QUANTIZED_LSTM
-
IF
-
WHILE
-
ELU
-
HARD_SWISH
-
FILL
-
RANK
New ML controls
NNAPI 1.3 introduces new controls to help machine learning run smoothly:
QoS API: The new Quality of Service API includes support for prioritization and task deadlines in NNAPI with the following new functions:
Memory domain input/output: NNAPI 1.3 includes support for memory domains as input and output to execution. This removes unnecessary copies of the same data among different system components, improving the runtime performance of Android neural networks. This feature adds a set of new NDK APIs for use with
ANeuralNetworksMemoryDesc
andANeuralNetworkMemory
objects, including the following functions:-
ANeuralNetworksMemoryDesc_create()
-
ANeuralNetworksMemoryDesc_free()
-
ANeuralNetworksMemoryDesc_addInputRole()
-
ANeuralNetworksMemoryDesc_addOutputRole()
-
ANeuralNetworksMemoryDesc_setDimensions()
-
ANeuralNetworksMemoryDesc_finish()
-
ANeuralNetworksMemory_createFromDesc()
-
ANeuralNetworksMemory_copy()
To learn more, see the neural network memory domain sample .
-
Dependency API and sync fence support: NNAPI 1.3 includes support for asynchronous compute with dependencies, allowing greatly reduced overhead when invoking small chained models. This feature adds the following new functions:
Control flow: NNAPI 1.3 includes support for general control flow with the new graph operations
ANEURALNETWORKS_IF
andANEURALNETWORKS_WHILE
, which accept other models as arguments using the newANEURALNETWORKS_MODEL
operand type. Additionally, this feature adds the following new functions:
NDK Thermal API
When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps in unexpected ways. Apps or games that incorporate complex graphics, heavy computation, or sustained network activity are more likely to encounter issues.
Use the NDK Thermal API in Android 11 to monitor temperature changes on the device, and then take action to maintain lower power usage and cooler device temperature. This API is similar to the Java Thermal API ; you can use it to receive notifications for any thermal status change or to poll the current status directly.
Text and input
Improved IME transitions
Android 11 introduces new APIs to improve transitions for input method editors (IMEs), such as on-screen keyboards. These APIs make it easier to adjust your app's content in synchronization with the IME's appearance and disappearance, and with other elements like the status and navigation bars.
To show an IME while any EditText
has the focus, call view.getInsetsController(). show(Type.ime())
. (You can call this method on any view in the same hierarchy as the focused EditText
, you don't have to call it on the EditText
specifically.) To hide the IME, call view.getInsetsController(). hide(Type.ime())
. You can check whether an IME is currently visible by calling view.getRootWindowInsets(). isVisible(Type.ime())
.
To synchronize your app's views with the appearance and disappearance of the IME, set a listener on a view by providing a WindowInsetsAnimation.Callback
to View.setWindowInsetsAnimationCallback()
. (You can set this listener on any view, it doesn't have to be an EditText
.) The IME calls your listener's onPrepare()
method, then it calls onStart()
at the beginning of the transition. It then calls onProgress()
at each progression in the transition. When the transition has finished, the IME calls onEnd()
. At any point in the transition, you can find out how much progress the transition has made by calling WindowInsetsAnimation.getFraction()
.
For an example of how to use these APIs, see the new WindowInsetsAnimation code sample.
Controlling the IME animation
You can also take control of the IME animation, or the animation of another system bar like the navigation bar. To do this, first call setOnApplyWindowInsetsListener()
to set a new listener for window inset changes:
কোটলিন
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; } });
To move the IME or other system bar, call the controller's controlWindowInsetsAnimation()
method:
কোটলিন
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() {} });
Updates to the ICU libraries
Android 11 updates the android.icu
package to use version 66 of the ICU library , compared to version 63 in Android 10. The new library version includes updated CLDR locale data and a number of enhancements to internationalization support in Android.
Notable changes in the new library versions include the following:
- Many formatting APIs now support a new return object type that extends
FormattedValue
. - The
LocaleMatcher
API is enhanced with a builder class, support for thejava.util.Locale
type, and a result class featuring additional data about a match. - Unicode 13 is now supported.
মিডিয়া
Allocating MediaCodec buffers
Android 11 includes a new MediaCodec
APIs that gives apps more control when allocating input and output buffers. This lets your app manage memory more efficiently.
New classes:
New methods:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
In addition, the behavior of two methods in MediaCodec.Callback()
have changed:
-
onInputBufferAvailable()
- Instead of calling
MediaCodec.getInputBuffer()
andMediaCodec.queueInputBuffer()
with the index, if configured to use the Block Model API, apps should useMediaCodec.getQueueRequest
with the index, attaching a LinearBlock/HardwareBuffer to the slot. -
onOutputBufferAvailable()
- Instead of calling
MediaCodec.getOutputBuffer()
with the index, apps may useMediaCodec.getOutputFrame()
with the index to get theOutputFrame
object with more information and LinearBlock/HardwareBuffer buffers.
Low-latency decoding in MediaCodec
Android 11 enhances MediaCodec
to support low-latency decoding for games and other real-time apps. You can check whether a codec supports low-latency decoding by passing FEATURE_LowLatency
to MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
To turn low-latency decoding on or off, do either of the following:
- Set the new key
KEY_LOW_LATENCY
to 0 or 1 usingMediaCodec.configure()
. - Set the new parameter key
PARAMETER_KEY_LOW_LATENCY
to 0 or 1 usingMediaCodec.setParameters()
.
New AAudio function AAudioStream_release()
The function AAudioStream_close()
releases and closes an audio stream at the same time. এটি বিপজ্জনক হতে পারে। If another process tries to access the stream after it's been closed, the process will crash.
The new function AAudioStream_release()
releases the stream but does not close it. This frees its resources and leaves the stream in a known state. The object persists until you call AAudioStream_close()
.
MediaParser API
MediaParser is a new low level API for media extraction. It is more flexible than MediaExtractor and provides additional control over media extraction functionality.
Audio capture from a USB device
When an application without RECORD_AUDIO
permission uses UsbManager
to request direct access to a USB audio device with audio capture capability (such as a USB headset), a new warning message appears asking the user to confirm permission to use the device. The system ignores any “always use” option, so the user must acknowledge the warning and grant permission every time an app requests access.
To avoid this behavior, your app should request the RECORD_AUDIO
permission.
Concurrent mic access
Android 11 adds new methods to the AudioRecord
, MediaRecorder
, and AAudioStream
APIs. These methods enable and disable the ability to capture concurrently regardless of the selected use case. See Sharing Audio Input .
Output switcher
Android 11 implements new behavior for apps that use the cast and mediarouter APIs.
In addition to accessing casting options from within an app the switching options also appear in the system media player. This helps to give the user a seamless journey when moving between devices as they change their viewing and listening contexts, such as watching video in the kitchen versus on a phone, or listening to audio in the home or car. See the output switcher .
সংযোগ
Wi-Fi Passpoint enhancements
For information on Passpoint capabilities added in Android 11, see Passpoint .
Wi-Fi Suggestion API is expanded
Android 11 expands the Wi-Fi Suggestion API to increase your app's network management capabilities, including the following:
- Connectivity management apps can manage their own networks by allowing disconnection requests.
- Passpoint networks are integrated into the Suggestion API and can be suggested to the user.
- Analytics APIs enable you to get information about the quality of your networks.
CallScreeningService updates
Starting in Android 11, a CallScreeningService can request information about the STIR/SHAKEN verification status (verstat) for incoming calls. This information is provided as part of the call details for incoming calls.
If a CallScreeningService
holds the READ_CONTACTS
permission, the app is notified when there are incoming calls from, or outgoing calls to, a number in the user's contacts.
For more information, see Prevent caller ID spoofing .
Open Mobile API updates
For information on OMAPI support on Android 11 and higher, see Open Mobile API reader support .
Performant VPNs
Apps that target API level 30 and higher or that are running on devices launched on API level 29 and higher can apply IKEv2/IPsec to VPNs for both user-configured and app-based VPNs.
The VPNs run native to the operating system, simplifying the code required to establish IKEv2/IPsec VPN connections in an app.
Per-process network access control
For information on enabling network access on a per-process basis, see Manage network usage .
Allow multiple installed Passpoint configurations with the same FQDN
Starting in Android 11, you can use PasspointConfiguration.getUniqueId()
to get a unique identifier for a PasspointConfiguration
object, which enables your app's users to install multiple profiles with the same fully qualified domain name (FQDN).
This functionality is helpful when a carrier deploys more than one combination of Mobile Country Code (MCC) and Mobile Network Code (MNC) on their network, but has only a single FQDN. On Android 11 and higher, it is possible to install more than one profile with the same FQDN that will match the network as the Home provider when the user installs a SIM with either MCC or MNC.
GNSS antenna support
Android 11 introduces the GnssAntennaInfo
class, which makes it possible for your app to make more use of centimeter-accuracy positioning that the Global Navigation Satellite System (GNSS) can provide.
Learn more in the guide on antenna calibration information .
গ্রাফিক্স
NDK image decoder
The NDK ImageDecoder
API provides a standard API for Android C/C++ apps to decode images directly. App developers no longer need to use the framework APIs (via JNI) or bundle third-party image-decoding libraries. For more information, see the Image decoder developer guide .
Frame rate API
Android 11 provides an API that enables apps to inform the system of their intended frame rate, to reduce judder on devices that support multiple refresh rates. For information on how to use this API, see the Frame rate guide .
Requesting and checking for low latency support
Certain displays can perform graphics post-processing, such as some external displays and TVs. This post-processing improves the graphics but can increase latency. Newer displays which support HDMI 2.1 have an auto low latency mode ( ALLM , also known as game mode ), which minimizes latency by switching off this post-processing. For more details on ALLM, refer to the HDMI 2.1 specification .
A window can request that auto low latency mode be used, if it is available. ALLM is particularly useful for applications like games and videoconferencing, where low latency is more important than having the best possible graphics.
To toggle minimal post-processing on or off, call Window.setPreferMinimalPostProcessing()
, or set the window's preferMinimalPostProcessing
attribute to true
. Not all displays support minimal post-processing; to find out if a particular display does support it, call the new method Display.isMinimalPostProcessingSupported()
.
Performant graphics debug layer injection
Applications can now load external graphics layers ( GLES , Vulkan ) into native application code to expose the same functionality as a debuggable app, but without incurring the performance overhead. This feature is especially important when profiling your application with tools like GAPID . To profile your app, include the following meta-data element in your app manifest file instead of making the application debuggable:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Images and camera
Mute notification sounds and vibrations during active capture
Beginning with Android 11, when actively using the camera, your app can mute only vibrations, both sounds and vibrations, or neither using setCameraAudioRestriction()
.
Expanded camera support in Android emulator
For information on the expanded support for cameras in the emulator starting with Android 11, see Camera support .
Support for concurrent use of more than one camera
Android 11 adds APIs to query support for using more than one camera at a time, including both a front-facing and rear-facing camera.
To check for support on the device on which your app is running, use the following methods:
-
getConcurrentCameraIds()
returns aSet
of combinations of camera IDs that can stream concurrently with guaranteed stream combinations when configured by the same application process. -
isConcurrentSessionConfigurationSupported()
queries whether camera devices can concurrently support the corresponding session configurations.
Better support for HEIF images with multiple frames
Beginning with Android 11, if you call ImageDecoder.decodeDrawable()
and pass an HEIF image containing a sequence of frames (such as an animation or a burst photo), the method returns an AnimatedImageDrawable
containing the entire image sequence. On earlier versions of Android, the method returned a BitmapDrawable
of just a single frame.
If the HEIF graphic contains multiple frames that are not in a sequence, you can retrieve an individual frame by calling MediaMetadataRetriever.getImageAtIndex()
.
অ্যাক্সেসযোগ্যতা
Updates for accessibility service developers
If you create a custom accessibility service, you can use the following features in Android 11:
- The user-facing explanation of an accessibility service now allows for HTML and images in addition to plain text. This flexibility makes it easier to explain to end-users what your service does and how it can help them.
- To work with a description of a UI element's state that's more semantically meaningful than
contentDescription
, call thegetStateDescription()
method. - To request that touch events bypass the system's touch explorer, call
setTouchExplorationPassthroughRegion()
. Similarly, to request that gestures bypass the system's gesture detector, callsetGestureDetectionPassthroughRegion()
. - You can request IME actions, such as "enter" and "next", as well as screenshots of windows that don't enable the
FLAG_SECURE
flag.
অতিরিক্ত বৈশিষ্ট্য
App process exit reasons
Android 11 introduces the ActivityManager.getHistoricalProcessExitReasons()
method, which reports the reasons for any recent process terminations. Apps can use this method to gather crash diagnostic information, such as whether a process termination is due to ANRs, memory issues, or other reasons. Additionally, you can use the new setProcessStateSummary()
method to store custom state information for later analysis.
The getHistoricalProcessExitReasons()
method returns instances of the ApplicationExitInfo
class, which contains information related to an app process's death. By calling getReason()
on an instance of this class, you can determine why your app's process was killed. For example, a return value of REASON_CRASH
indicates that an unhandled exception occurred in your app. If your app needs to ensure uniqueness for exit events, it can maintain an app-specific identifier, such as a hash value based on the timestamp from the getTimestamp()
method.
অতিরিক্ত সম্পদ
For more information, read the article about new Android 11 tools to make apps more private and stable on Medium.
Resource loaders
Android 11 introduces a new API that allows apps to dynamically extend how resources are searched and loaded. The new API classes ResourcesLoader
and ResourcesProvider
are primarily responsible for providing the new functionality. Together, they provide the ability to supply additional resources and assets, or modify the values of existing resources and assets.
ResourcesLoader
objects are containers that supply ResourcesProvider
objects to an app's Resources
instance. In turn, ResourcesProvider
objects provide methods to load resource data from APKs and resource tables.
One primary use case for this API is custom asset loading. You can use loadFromDirectory()
to create a ResourcesProvider
that redirects the resolution of file-based resources and assets, causing it to search a specific directory rather than the application APK. You can access these assets through the open()
family of methods from the AssetManager
API class, just like with assets bundled in the APK.
APK signature scheme v4
Android 11 adds support for APK Signature Scheme v4 . This scheme produces a new kind of signature in a separate file ( apk-name .apk.idsig
) but is otherwise similar to v2 and v3. No changes are made to the APK. This scheme supports ADB incremental APK installation , which speeds up APK install.
Dynamic intent filters
In order to receive intents, an app must declare at compile time which types of data it is able to receive by defining an intent filter in the app manifest. In Android 10 and lower, apps have no way of changing their intent filters at runtime. This is a problem for virtualization apps (such as virtual machines and remote desktops) because they have no way of knowing exactly what software the user will install inside them.
Android 11 introduces MIME groups, a new manifest element which allows an app to declare a dynamic set of MIME types in an intent filter and modify it programmatically at runtime. To use a MIME group, include a data element in your app manifest with the new android:mimeGroup
attribute:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
The value of the android:mimeGroup
attribute is an arbitrary string ID that identifies the MIME group at runtime. You can access and update the contents of a MIME group by passing its ID to the following new methods in the PackageManager
API class:
When you add a MIME type to a MIME group programmatically, it functions exactly the same as a static MIME type explicitly declared in the manifest.
Autofill enhancements
Android 11 introduces improvements for autofill services.
Hint identifiers in AssistStructure.ViewNode
It is often useful for autofill services to compute a signature hash for a view based on the view's properties. The view hint is a particularly good property to include when computing a signature hash, but the hint string might change with the phone's locale. To solve this problem, Android 11 expands AssistStructure.ViewNode
with a new getHintIdEntry()
method, which returns the resource identifier for a view's hint text. This method provides a locale-independent value that you can use to compute signature hashes.
Datasets shown events
To help autofill services improve their suggestions, Android 11 provides a way to identify cases where an autofill service presented datasets but the user did not select any of them. In Android 11, FillEventHistory
reports a new TYPE_DATASETS_SHOWN
event type. FillEventHistory
logs an event of this type whenever the autofill service presents one or more datasets to the user. Autofill services can use these events in conjunction with the existing TYPE_DATASET_SELECTED
event to determine whether the user selected any of the provided autofill options.
IME integration
Keyboards and other IMEs can now display autofill suggestions inline, in a suggestion strip or similar interface, instead of in a drop-down menu. To protect sensitive information like passwords and credit-card numbers, the suggestions are displayed to the user but are not known to the IME until the user selects one. For information on how IMEs and password managers can support this feature, see Integrating autofill with keyboards .
Data sharing with content capture service
Starting in Android 11, your app can share data with the device's content capture service. This capability makes it easier for a device to deliver in-context intelligence, such as showing the name of a song that's currently playing in the user's environment.
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.
Android 11 introduces great new features and APIs for developers. The sections below help you learn about features for your apps and get started with the related APIs.
For a detailed list of new, modified, and removed APIs, read the API diff report . For details on new APIs visit the Android API reference — new APIs are highlighted for visibility. Also, to learn about areas where platform changes may affect your apps, be sure to check out Android 11 behavior changes for apps that target Android R and for all apps , as well as privacy changes .
নতুন অভিজ্ঞতা
Device controls
Android 11 includes a new ControlsProviderService
API that you can use to expose controls for connected, external devices. These controls appear under Device controls in the Android power menu. For more information, see Control external devices .
মিডিয়া কন্ট্রোল
Android 11 updates how media controls are displayed. Media controls appear near quick settings. Sessions from multiple apps are arranged in a swipeable carousel which includes streams playing locally on the phone, remote streams, such as those detected on external devices or cast sessions, and previous, resumable sessions in the order they were last played.
Users can restart previous sessions from the carousel without having to start the app. When playback begins, the user interacts with the media controls in the usual way.
For more information, see media controls .
পর্দা
Better support for waterfall displays
Android 11 provides several APIs to support waterfall displays , displays which wrap around the edge of the device. These displays are treated as a variant of displays with display cutouts. The existing DisplayCutout
.getSafeInset…()
methods now return the safe inset to avoid waterfall areas as well as cutouts. To render your app content in the waterfall area, do the following:
Call
DisplayCutout.getWaterfallInsets()
to get exact dimensions of the waterfall inset.Set the window layout attribute
layoutInDisplayCutoutMode
toLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
to allow the window to extend into the cutout and waterfall areas on all edges of the screen. You must make sure that no essential content is in the cutout or waterfall areas.
Hinge angle sensor and foldables
Android 11 makes it possible for apps running on devices with hinge-based screen configurations to determine the angle of the hinge by providing a new sensor with TYPE_HINGE_ANGLE
, and a new SensorEvent
that can monitor the hinge angle and provides a measurement in degrees between two integral parts of the device. You can use these raw measurements to perform granular animations as the user manipulates the device.
See Foldables .
কথোপকথন
Conversation improvements
Android 11 makes a number of improvements to the way conversations are handled. Conversations are real-time, bidirectional communications between two or more people. These conversations are given special prominence, and users have several new options in how to interact with them.
For more information about conversations and how your app can support them, see People and conversations .
চ্যাট বুদবুদ
Bubbles are now available to developers to help surface conversations across the system. Bubbles was an experimental feature in Android 10 that was enabled through a developer option; in Android 11, this is no longer necessary.
If an app targets Android 11 (API level 30) or higher, its notifications are not presented as bubbles unless they fulfill the new conversation requirements . Specifically, the notification must be associated with a shortcut.
Prior to Android 11, if you wanted a notification to be bubbled, you needed to explicitly specify that the notification was set to always launch in document UI mode. Beginning with Android 11, you no longer need to explicitly make that setting; if the notification is bubbled, the platform automatically sets the notification to always launch in document UI mode.
There are a number of improvements to bubble performance, and users have more flexibility in enabling and disabling bubbles from each app. For developers who implemented experimental support, there are a few changes to the APIs in Android 11:
- The
BubbleMetadata.Builder()
constructor with no parameters is deprecated. Instead, use either of the two new constructorsBubbleMetadata.Builder(PendingIntent, Icon)
orBubbleMetadata.Builder(String)
. - Create
BubbleMetadata
from a shortcut ID by callingBubbleMetadata.Builder(String)
. The string passed should match the shortcut ID provided toNotification.Builder
. - Create bubble icons with
Icon.createWithContentUri()
, or with the new methodcreateWithAdaptiveBitmapContentUri()
.
5G visual indicators
For information on displaying 5G indicators on users' devices, see Tell your users when they're on 5G .
গোপনীয়তা
Android 11 introduces a large number of changes and restrictions to enhance user privacy. To learn more, see the Privacy page.
নিরাপত্তা
Biometric authentication updates
To help you control the level of security for your app's data, Android 11 provides several improvements to biometric authentication. These changes also appear in the Jetpack Biometric library .
প্রমাণীকরণ প্রকার
Android 11 introduces the BiometricManager.Authenticators
interface, which you can use to declare the types of authentication that your app supports .
Determine which authentication type was used
ব্যবহারকারীর প্রমাণীকরণের পরে, আপনি getAuthenticationType()
কল করে একটি ডিভাইস শংসাপত্র বা বায়োমেট্রিক শংসাপত্র ব্যবহার করে ব্যবহারকারী প্রমাণীকরণ করেছেন কিনা তা পরীক্ষা করতে পারেন।
Additional support for auth-per-use keys
Android 11 provides more support for authentication using auth-per-use keys .
Deprecated methods
Android 11 deprecates the following methods:
- The
setDeviceCredentialAllowed()
method. - The
setUserAuthenticationValidityDurationSeconds()
method. - The overloaded version of
canAuthenticate()
that takes no arguments.
বড় ডেটাসেটের নিরাপদ শেয়ারিং
In some situations, such as those that involve machine learning or media playback, your app might want to use the same large dataset as another app. In previous versions of Android, your app and another app would each need to download a separate copy of the same dataset.
To help reduce data redundancy, both over the network and on disk, Android 11 allows these large datasets to be cached on the device using shared data blobs . To learn more about sharing datasets, see the in-depth guide on sharing large datasets .
Perform file-based encryption after an OTA restart without user credentials
After the device completes an OTA update and restarts, the Credential Encrypted keys (CE) that are placed in credential-protected storage are immediately available for File-Based Encryption (FBE) operations. This means that, after an OTA update, your app can resume operations that require the CE keys before the user enters their PIN, pattern, or password.
কর্মক্ষমতা এবং গুণমান
ওয়্যারলেস ডিবাগিং
Android 11 supports deploying and debugging your app wirelessly from your workstation via Android Debug Bridge (adb). For example, you can deploy your debuggable app to multiple remote devices without physically connecting your device via USB and contending with common USB connection issues, such as driver installation. For more information, see Run apps on a hardware device .
ADB Incremental APK installation
Installing large (2GB+) APKs on a device can take a long time, even if only a small change is made to an app. ADB (Android Debug Bridge) Incremental APK installation accelerates this process by installing enough of the APK to launch the app while streaming the remaining data in the background. adb install
will use this feature automatically if it is supported by the device and you have the latest SDK Platform-Tools installed. If it is not supported, the default installation method is silently used.
Use the following adb command to use the feature. If the device does not support incremental installation, the command fails and prints a verbose explanation.
adb install --incremental
Before running an ADB incremental APK install, you must sign your APK and create an APK Signature Scheme v4 file . The v4 signature file must be placed next to the APK for this feature to work.
Error detection using the native memory allocator
GWP-ASan is a native memory allocator feature that helps find use-after-free and heap-buffer-overflow bugs. You can enable this feature globally or for specific subprocesses of your app. To learn more, see the GWP-Asan guide .
Neural Networks API 1.3
Android 11 expands and improves the Neural Networks API (NNAPI) .
New operations
NNAPI 1.3 introduces a new operand type, TENSOR_QUANT8_ASYMM_SIGNED
, to support TensorFlow Lite's new quantization scheme .
Additionally, NNAPI 1.3 introduces the following new operations:
-
QUANTIZED_LSTM
-
IF
-
WHILE
-
ELU
-
HARD_SWISH
-
FILL
-
RANK
New ML controls
NNAPI 1.3 introduces new controls to help machine learning run smoothly:
QoS API: The new Quality of Service API includes support for prioritization and task deadlines in NNAPI with the following new functions:
Memory domain input/output: NNAPI 1.3 includes support for memory domains as input and output to execution. This removes unnecessary copies of the same data among different system components, improving the runtime performance of Android neural networks. This feature adds a set of new NDK APIs for use with
ANeuralNetworksMemoryDesc
andANeuralNetworkMemory
objects, including the following functions:-
ANeuralNetworksMemoryDesc_create()
-
ANeuralNetworksMemoryDesc_free()
-
ANeuralNetworksMemoryDesc_addInputRole()
-
ANeuralNetworksMemoryDesc_addOutputRole()
-
ANeuralNetworksMemoryDesc_setDimensions()
-
ANeuralNetworksMemoryDesc_finish()
-
ANeuralNetworksMemory_createFromDesc()
-
ANeuralNetworksMemory_copy()
To learn more, see the neural network memory domain sample .
-
Dependency API and sync fence support: NNAPI 1.3 includes support for asynchronous compute with dependencies, allowing greatly reduced overhead when invoking small chained models. This feature adds the following new functions:
Control flow: NNAPI 1.3 includes support for general control flow with the new graph operations
ANEURALNETWORKS_IF
andANEURALNETWORKS_WHILE
, which accept other models as arguments using the newANEURALNETWORKS_MODEL
operand type. Additionally, this feature adds the following new functions:
NDK Thermal API
When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps in unexpected ways. Apps or games that incorporate complex graphics, heavy computation, or sustained network activity are more likely to encounter issues.
Use the NDK Thermal API in Android 11 to monitor temperature changes on the device, and then take action to maintain lower power usage and cooler device temperature. This API is similar to the Java Thermal API ; you can use it to receive notifications for any thermal status change or to poll the current status directly.
Text and input
Improved IME transitions
Android 11 introduces new APIs to improve transitions for input method editors (IMEs), such as on-screen keyboards. These APIs make it easier to adjust your app's content in synchronization with the IME's appearance and disappearance, and with other elements like the status and navigation bars.
To show an IME while any EditText
has the focus, call view.getInsetsController(). show(Type.ime())
. (You can call this method on any view in the same hierarchy as the focused EditText
, you don't have to call it on the EditText
specifically.) To hide the IME, call view.getInsetsController(). hide(Type.ime())
. You can check whether an IME is currently visible by calling view.getRootWindowInsets(). isVisible(Type.ime())
.
To synchronize your app's views with the appearance and disappearance of the IME, set a listener on a view by providing a WindowInsetsAnimation.Callback
to View.setWindowInsetsAnimationCallback()
. (You can set this listener on any view, it doesn't have to be an EditText
.) The IME calls your listener's onPrepare()
method, then it calls onStart()
at the beginning of the transition. It then calls onProgress()
at each progression in the transition. When the transition has finished, the IME calls onEnd()
. At any point in the transition, you can find out how much progress the transition has made by calling WindowInsetsAnimation.getFraction()
.
For an example of how to use these APIs, see the new WindowInsetsAnimation code sample.
Controlling the IME animation
You can also take control of the IME animation, or the animation of another system bar like the navigation bar. To do this, first call setOnApplyWindowInsetsListener()
to set a new listener for window inset changes:
কোটলিন
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; } });
To move the IME or other system bar, call the controller's controlWindowInsetsAnimation()
method:
কোটলিন
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() {} });
Updates to the ICU libraries
Android 11 updates the android.icu
package to use version 66 of the ICU library , compared to version 63 in Android 10. The new library version includes updated CLDR locale data and a number of enhancements to internationalization support in Android.
Notable changes in the new library versions include the following:
- Many formatting APIs now support a new return object type that extends
FormattedValue
. - The
LocaleMatcher
API is enhanced with a builder class, support for thejava.util.Locale
type, and a result class featuring additional data about a match. - Unicode 13 is now supported.
মিডিয়া
Allocating MediaCodec buffers
Android 11 includes a new MediaCodec
APIs that gives apps more control when allocating input and output buffers. This lets your app manage memory more efficiently.
New classes:
New methods:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
In addition, the behavior of two methods in MediaCodec.Callback()
have changed:
-
onInputBufferAvailable()
- Instead of calling
MediaCodec.getInputBuffer()
andMediaCodec.queueInputBuffer()
with the index, if configured to use the Block Model API, apps should useMediaCodec.getQueueRequest
with the index, attaching a LinearBlock/HardwareBuffer to the slot. -
onOutputBufferAvailable()
- Instead of calling
MediaCodec.getOutputBuffer()
with the index, apps may useMediaCodec.getOutputFrame()
with the index to get theOutputFrame
object with more information and LinearBlock/HardwareBuffer buffers.
Low-latency decoding in MediaCodec
Android 11 enhances MediaCodec
to support low-latency decoding for games and other real-time apps. You can check whether a codec supports low-latency decoding by passing FEATURE_LowLatency
to MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
To turn low-latency decoding on or off, do either of the following:
- Set the new key
KEY_LOW_LATENCY
to 0 or 1 usingMediaCodec.configure()
. - Set the new parameter key
PARAMETER_KEY_LOW_LATENCY
to 0 or 1 usingMediaCodec.setParameters()
.
New AAudio function AAudioStream_release()
The function AAudioStream_close()
releases and closes an audio stream at the same time. এটি বিপজ্জনক হতে পারে। If another process tries to access the stream after it's been closed, the process will crash.
The new function AAudioStream_release()
releases the stream but does not close it. This frees its resources and leaves the stream in a known state. The object persists until you call AAudioStream_close()
.
MediaParser API
MediaParser is a new low level API for media extraction. It is more flexible than MediaExtractor and provides additional control over media extraction functionality.
Audio capture from a USB device
When an application without RECORD_AUDIO
permission uses UsbManager
to request direct access to a USB audio device with audio capture capability (such as a USB headset), a new warning message appears asking the user to confirm permission to use the device. The system ignores any “always use” option, so the user must acknowledge the warning and grant permission every time an app requests access.
To avoid this behavior, your app should request the RECORD_AUDIO
permission.
Concurrent mic access
Android 11 adds new methods to the AudioRecord
, MediaRecorder
, and AAudioStream
APIs. These methods enable and disable the ability to capture concurrently regardless of the selected use case. See Sharing Audio Input .
Output switcher
Android 11 implements new behavior for apps that use the cast and mediarouter APIs.
In addition to accessing casting options from within an app the switching options also appear in the system media player. This helps to give the user a seamless journey when moving between devices as they change their viewing and listening contexts, such as watching video in the kitchen versus on a phone, or listening to audio in the home or car. See the output switcher .
সংযোগ
Wi-Fi Passpoint enhancements
For information on Passpoint capabilities added in Android 11, see Passpoint .
Wi-Fi Suggestion API is expanded
Android 11 expands the Wi-Fi Suggestion API to increase your app's network management capabilities, including the following:
- Connectivity management apps can manage their own networks by allowing disconnection requests.
- Passpoint networks are integrated into the Suggestion API and can be suggested to the user.
- Analytics APIs enable you to get information about the quality of your networks.
CallScreeningService updates
Starting in Android 11, a CallScreeningService can request information about the STIR/SHAKEN verification status (verstat) for incoming calls. This information is provided as part of the call details for incoming calls.
If a CallScreeningService
holds the READ_CONTACTS
permission, the app is notified when there are incoming calls from, or outgoing calls to, a number in the user's contacts.
For more information, see Prevent caller ID spoofing .
Open Mobile API updates
For information on OMAPI support on Android 11 and higher, see Open Mobile API reader support .
Performant VPNs
Apps that target API level 30 and higher or that are running on devices launched on API level 29 and higher can apply IKEv2/IPsec to VPNs for both user-configured and app-based VPNs.
The VPNs run native to the operating system, simplifying the code required to establish IKEv2/IPsec VPN connections in an app.
Per-process network access control
For information on enabling network access on a per-process basis, see Manage network usage .
Allow multiple installed Passpoint configurations with the same FQDN
Starting in Android 11, you can use PasspointConfiguration.getUniqueId()
to get a unique identifier for a PasspointConfiguration
object, which enables your app's users to install multiple profiles with the same fully qualified domain name (FQDN).
This functionality is helpful when a carrier deploys more than one combination of Mobile Country Code (MCC) and Mobile Network Code (MNC) on their network, but has only a single FQDN. On Android 11 and higher, it is possible to install more than one profile with the same FQDN that will match the network as the Home provider when the user installs a SIM with either MCC or MNC.
GNSS antenna support
Android 11 introduces the GnssAntennaInfo
class, which makes it possible for your app to make more use of centimeter-accuracy positioning that the Global Navigation Satellite System (GNSS) can provide.
Learn more in the guide on antenna calibration information .
গ্রাফিক্স
NDK image decoder
The NDK ImageDecoder
API provides a standard API for Android C/C++ apps to decode images directly. App developers no longer need to use the framework APIs (via JNI) or bundle third-party image-decoding libraries. For more information, see the Image decoder developer guide .
Frame rate API
Android 11 provides an API that enables apps to inform the system of their intended frame rate, to reduce judder on devices that support multiple refresh rates. For information on how to use this API, see the Frame rate guide .
Requesting and checking for low latency support
Certain displays can perform graphics post-processing, such as some external displays and TVs. This post-processing improves the graphics but can increase latency. Newer displays which support HDMI 2.1 have an auto low latency mode ( ALLM , also known as game mode ), which minimizes latency by switching off this post-processing. For more details on ALLM, refer to the HDMI 2.1 specification .
A window can request that auto low latency mode be used, if it is available. ALLM is particularly useful for applications like games and videoconferencing, where low latency is more important than having the best possible graphics.
To toggle minimal post-processing on or off, call Window.setPreferMinimalPostProcessing()
, or set the window's preferMinimalPostProcessing
attribute to true
. Not all displays support minimal post-processing; to find out if a particular display does support it, call the new method Display.isMinimalPostProcessingSupported()
.
Performant graphics debug layer injection
Applications can now load external graphics layers ( GLES , Vulkan ) into native application code to expose the same functionality as a debuggable app, but without incurring the performance overhead. This feature is especially important when profiling your application with tools like GAPID . To profile your app, include the following meta-data element in your app manifest file instead of making the application debuggable:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Images and camera
Mute notification sounds and vibrations during active capture
Beginning with Android 11, when actively using the camera, your app can mute only vibrations, both sounds and vibrations, or neither using setCameraAudioRestriction()
.
Expanded camera support in Android emulator
For information on the expanded support for cameras in the emulator starting with Android 11, see Camera support .
Support for concurrent use of more than one camera
Android 11 adds APIs to query support for using more than one camera at a time, including both a front-facing and rear-facing camera.
To check for support on the device on which your app is running, use the following methods:
-
getConcurrentCameraIds()
returns aSet
of combinations of camera IDs that can stream concurrently with guaranteed stream combinations when configured by the same application process. -
isConcurrentSessionConfigurationSupported()
queries whether camera devices can concurrently support the corresponding session configurations.
Better support for HEIF images with multiple frames
Beginning with Android 11, if you call ImageDecoder.decodeDrawable()
and pass an HEIF image containing a sequence of frames (such as an animation or a burst photo), the method returns an AnimatedImageDrawable
containing the entire image sequence. On earlier versions of Android, the method returned a BitmapDrawable
of just a single frame.
If the HEIF graphic contains multiple frames that are not in a sequence, you can retrieve an individual frame by calling MediaMetadataRetriever.getImageAtIndex()
.
অ্যাক্সেসযোগ্যতা
Updates for accessibility service developers
If you create a custom accessibility service, you can use the following features in Android 11:
- The user-facing explanation of an accessibility service now allows for HTML and images in addition to plain text. This flexibility makes it easier to explain to end-users what your service does and how it can help them.
- To work with a description of a UI element's state that's more semantically meaningful than
contentDescription
, call thegetStateDescription()
method. - To request that touch events bypass the system's touch explorer, call
setTouchExplorationPassthroughRegion()
. Similarly, to request that gestures bypass the system's gesture detector, callsetGestureDetectionPassthroughRegion()
. - You can request IME actions, such as "enter" and "next", as well as screenshots of windows that don't enable the
FLAG_SECURE
flag.
অতিরিক্ত বৈশিষ্ট্য
App process exit reasons
Android 11 introduces the ActivityManager.getHistoricalProcessExitReasons()
method, which reports the reasons for any recent process terminations. Apps can use this method to gather crash diagnostic information, such as whether a process termination is due to ANRs, memory issues, or other reasons. Additionally, you can use the new setProcessStateSummary()
method to store custom state information for later analysis.
The getHistoricalProcessExitReasons()
method returns instances of the ApplicationExitInfo
class, which contains information related to an app process's death. By calling getReason()
on an instance of this class, you can determine why your app's process was killed. For example, a return value of REASON_CRASH
indicates that an unhandled exception occurred in your app. If your app needs to ensure uniqueness for exit events, it can maintain an app-specific identifier, such as a hash value based on the timestamp from the getTimestamp()
method.
অতিরিক্ত সম্পদ
For more information, read the article about new Android 11 tools to make apps more private and stable on Medium.
Resource loaders
Android 11 introduces a new API that allows apps to dynamically extend how resources are searched and loaded. The new API classes ResourcesLoader
and ResourcesProvider
are primarily responsible for providing the new functionality. Together, they provide the ability to supply additional resources and assets, or modify the values of existing resources and assets.
ResourcesLoader
objects are containers that supply ResourcesProvider
objects to an app's Resources
instance. In turn, ResourcesProvider
objects provide methods to load resource data from APKs and resource tables.
One primary use case for this API is custom asset loading. You can use loadFromDirectory()
to create a ResourcesProvider
that redirects the resolution of file-based resources and assets, causing it to search a specific directory rather than the application APK. You can access these assets through the open()
family of methods from the AssetManager
API class, just like with assets bundled in the APK.
APK signature scheme v4
Android 11 adds support for APK Signature Scheme v4 . This scheme produces a new kind of signature in a separate file ( apk-name .apk.idsig
) but is otherwise similar to v2 and v3. No changes are made to the APK. This scheme supports ADB incremental APK installation , which speeds up APK install.
Dynamic intent filters
In order to receive intents, an app must declare at compile time which types of data it is able to receive by defining an intent filter in the app manifest. In Android 10 and lower, apps have no way of changing their intent filters at runtime. This is a problem for virtualization apps (such as virtual machines and remote desktops) because they have no way of knowing exactly what software the user will install inside them.
Android 11 introduces MIME groups, a new manifest element which allows an app to declare a dynamic set of MIME types in an intent filter and modify it programmatically at runtime. To use a MIME group, include a data element in your app manifest with the new android:mimeGroup
attribute:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
The value of the android:mimeGroup
attribute is an arbitrary string ID that identifies the MIME group at runtime. You can access and update the contents of a MIME group by passing its ID to the following new methods in the PackageManager
API class:
When you add a MIME type to a MIME group programmatically, it functions exactly the same as a static MIME type explicitly declared in the manifest.
Autofill enhancements
Android 11 introduces improvements for autofill services.
Hint identifiers in AssistStructure.ViewNode
It is often useful for autofill services to compute a signature hash for a view based on the view's properties. The view hint is a particularly good property to include when computing a signature hash, but the hint string might change with the phone's locale. To solve this problem, Android 11 expands AssistStructure.ViewNode
with a new getHintIdEntry()
method, which returns the resource identifier for a view's hint text. This method provides a locale-independent value that you can use to compute signature hashes.
Datasets shown events
To help autofill services improve their suggestions, Android 11 provides a way to identify cases where an autofill service presented datasets but the user did not select any of them. In Android 11, FillEventHistory
reports a new TYPE_DATASETS_SHOWN
event type. FillEventHistory
logs an event of this type whenever the autofill service presents one or more datasets to the user. Autofill services can use these events in conjunction with the existing TYPE_DATASET_SELECTED
event to determine whether the user selected any of the provided autofill options.
IME integration
Keyboards and other IMEs can now display autofill suggestions inline, in a suggestion strip or similar interface, instead of in a drop-down menu. To protect sensitive information like passwords and credit-card numbers, the suggestions are displayed to the user but are not known to the IME until the user selects one. For information on how IMEs and password managers can support this feature, see Integrating autofill with keyboards .
Data sharing with content capture service
Starting in Android 11, your app can share data with the device's content capture service. This capability makes it easier for a device to deliver in-context intelligence, such as showing the name of a song that's currently playing in the user's environment.
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.