Android 9 ফিচার ও API

Android 9 (API লেভেল ২৮) ব্যবহারকারী ও ডেভেলপারদের জন্য দারুণ নতুন ফিচার ও সুবিধা নিয়ে এসেছে। এই ডকুমেন্টে ডেভেলপারদের জন্য নতুন কী কী আছে তা হাইলাইট করা হয়েছে।

নতুন API সম্পর্কে জানতে, API ডিফারেন্স রিপোর্ট পড়ুন অথবা Android API রেফারেন্স দেখুন। এছাড়াও, প্ল্যাটফর্মের পরিবর্তন আপনার অ্যাপকে প্রভাবিত করতে পারে এমন জায়গাগুলি সম্পর্কে জানতে, Android 9-এর আচরণগত পরিবর্তন চেক করে দেখতে ভুলবেন না।

ওয়াই-ফাই RTT-এর মাধ্যমে ইনডোর পজিশনিং

নতুন RTT API আপনার অ্যাপে ইনডোর পজিশনিং কাজ করে।

Android 9, IEEE 802.11-2016 ওয়াই-ফাই প্রোটোকলের জন্য প্ল্যাটফর্ম সহায়তা যোগ করে—এটি ওয়াই-ফাই রাউন্ড-ট্রিপ-টাইম (RTT) নামেও পরিচিত—এর ফলে আপনি নিজের অ্যাপে ইনডোর পজিশনিংয়ের সুবিধা নিতে পারবেন।

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

আপনার ডিভাইস ৩ বা তার বেশি অ্যাক্সেস পয়েন্টের দূরত্ব পরিমাপ করলে, আপনি মাল্টিলেটারেশন অ্যালগরিদম ব্যবহার করে ডিভাইসের পজিশন অনুমান করতে পারবেন যা সেইসব পরিমাপের সাথে সবচেয়ে ভালভাবে মানানসই। ফলাফল সাধারণত ১ থেকে ২ মিটারের মধ্যে সঠিক হয়।

এই নির্ভুলতার সাহায্যে, আপনি ইন-বিল্ডিং নেভিগেশন এবং ফাইন-গ্রেন লোকেশন-ভিত্তিক পরিষেবার মতো নতুন অভিজ্ঞতা তৈরি করতে পারেন, যেমন দ্ব্যর্থতা নিরসন করা ভয়েস কন্ট্রোল (যেমন, "এই আলোটি চালু করুন") এবং লোকেশন-ভিত্তিক তথ্য (যেমন "এই প্রোডাক্টের জন্য কি বিশেষ অফার আছে?")।

Android WifiRttScan ডেমো অ্যাপে ব্যবহৃত WiFi RTT API দেখুন।

আরও তথ্যের জন্য, ওয়াই-ফাই লোকেশন: RTT-এর মাধ্যমে রেঞ্জিং দেখুন।

ডিসপ্লে কাট-আউট সংক্রান্ত সহায়তা

ডেভেলপার বিকল্প স্ক্রিনে আলাদা আলাদা কাটআউট সাইজ দেখানো হচ্ছে

ইমুলেটর ব্যবহার করে ডিসপ্লে কাট-আউট পরীক্ষা করা

Android 9-এ লেটেস্ট এজ-টু-এজ স্ক্রিনের জন্য সহায়তা প্রদান করা হয় যেখানে ক্যামেরা ও স্পিকারের জন্য ডিসপ্লে কাটআউট থাকে। The DisplayCutout ক্লাস আপনাকে সেইসব নন-ফাংশনাল অংশের লোকেশন ও আকার খুঁজে পেতে সাহায্য করে যেখানে কন্টেন্ট দেখানো উচিত নয়। এইসব কাটআউট এরিয়া আছে কিনা এবং সেগুলি কোথায় আছে তা নির্ধারণ করতে, getDisplayCutout() পদ্ধতি ব্যবহার করুন।

নতুন উইন্ডো লেআউট অ্যাট্রিবিউট, layoutInDisplayCutoutMode, আপনার অ্যাপকে ডিভাইসের কাটআউটের চারপাশে কন্টেন্ট লেআউট করতে দেয়। আপনি এই অ্যাট্রিবিউটকে নিম্নলিখিত মানগুলির মধ্যে একটিতে সেট করতে পারেন:

আপনি Android 9 চালানো যেকোনও ডিভাইস বা এমুলেটরে নিম্নলিখিত উপায়ে স্ক্রিন কাটআউট সিমুলেট করতে পারবেন:

  1. ডেভেলপার বিকল্প চালু করুন।
  2. ডেভেলপার বিকল্প স্ক্রিনে, স্ক্রল করে ড্রয়িং বিভাগে যান এবং কাটআউট সহ ডিসপ্লে সিমুলেট করুন বিকল্প বেছে নিন।
  3. কাটআউটের সাইজ বেছে নিন।

বিজ্ঞপ্তি

Android 9-এ বিজ্ঞপ্তি সংক্রান্ত বিভিন্ন উন্নতি করা হয়েছে, এগুলির সবকটিই API লেভেল ২৮ ও তার পরের যেকোনও লেভেল টার্গেট করা ডেভেলপারদের জন্য উপলভ্য।

মেসেজিং বিজ্ঞপ্তি

ফটো অ্যাটাচ করা MessagingStyle.

মেসেজিং বিজ্ঞপ্তি

উত্তর ও কথোপকথন সহ MessagingStyle।

Android 9 ফিচার সহ বিজ্ঞপ্তি ব্যবহার করে এমন স্যাম্পেল কোডের জন্য, People Sample দেখুন।

আরও উন্নত মেসেজিং অভিজ্ঞতা

Android 7.0 (API লেভেল 24) থেকে শুরু করে, আপনি কোনও বিজ্ঞপ্তি থেকে সরাসরি মেসেজের উত্তর দিতে বা অন্য টেক্সট লিখতে অ্যাকশন যোগ করতে পারবেন। Android 9-এ নিম্নলিখিত উন্নতি সহ এই ফিচার আরও উন্নত করা হয়েছে:

  • কথোপথনে অংশগ্রহণকারীদের জন্য সরলীকৃত সহায়তা: কথোপকথনে যুক্ত থাকা লোকজনকে শনাক্ত করতে Person class ব্যবহার করা হয়, এর মধ্যে তাদের অবতার ও URI অন্তর্ভুক্ত। addMessage()-এর মতো আরও অনেক API এখন CharSequence-এর পরিবর্তে Person ক্লাস ব্যবহার করে। Person class এছাড়াও Builder ডিজাইন প্যাটার্নে কাজ করে।

  • ছবির জন্য সহায়তা: Android 9 এখন ফোনে মেসেজিং বিজ্ঞপ্তি তে ছবি দেখায়। ছবি দেখাতে মেসেজে setData() ব্যবহার করতে পারেন। নিচের কোড স্নিপেট থেকে কীভাবে Person ও ছবি সহ মেসেজ তৈরি করতে হয় তা জানতে পারবেন।

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

জাভা

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • ড্রাফ্ট হিসেবে সেভ করা উত্তর: কোনও ব্যবহারকারী ভুলবশত মেসেজিং বিজ্ঞপ্তি বন্ধ করে দিলে, আপনার অ্যাপ সিস্টেমের পাঠানো EXTRA_REMOTE_INPUT_DRAFT উত্তরটি আবার দেখাতে পারবে। অ্যাপের টেক্সট ফিল্ড আগে থেকেই পূরণ করার জন্য আপনি এটি ব্যবহার করতে পারেন, যাতে ব্যবহারকারীরা তাদের উত্তর সম্পূর্ণ করতে পারেন।

  • কোনও কথোপকথন গ্রুপ কথোপকথন কিনা তা শনাক্ত করুন: আপনি setGroupConversation() ব্যবহার করে কোনও কথোপকথনকে উদ্দেশ্যমূলকভাবে গ্রুপ বা নন-গ্রুপ কথোপকথন হিসেবে শনাক্ত করতে পারেন।

  • ইন্টেন্টের জন্য সিম্যান্টিক অ্যাকশন সেট করুন: এই setSemanticAction() পদ্ধতি আপনাকে কোনও অ্যাকশনের সিম্যান্টিক অর্থ দিতে দেয়, যেমন "পড়া হয়েছে হিসেবে চিহ্নিত করো", "মুছে দাও", "উত্তর দাও" ইত্যাদি।

  • স্মার্ট রিপ্লাই: Android 9 আপনার মেসেজিং অ্যাপে উপলভ্য একই ধরনের সাজেস্ট করা উত্তর কাজ করে। ব্যবহারকারীকে স্ট্যান্ডার্ড উত্তরের একটি অ্যারে প্রদান করতে RemoteInput.setChoices() ব্যবহার করুন।

চ্যানেল সেটিংস, ব্রডকাস্ট ও 'বিরক্ত করবে না'

Android 8.0-তে বিজ্ঞপ্তি চ্যানেল চালু করা হয়েছে। এর মাধ্যমে আপনি দেখাতে চান এমন প্রতিটি ধরনের বিজ্ঞপ্তির জন্য ব্যবহারকারী-কাস্টমাইজযোগ্য চ্যানেল তৈরি করতে পারবেন। Android 9 এইসব পরিবর্তনের মাধ্যমে বিজ্ঞপ্তি চ্যানেল সেটিংসকে আরও সহজ করে তোলে:

  • চ্যানেল গ্রুপ ব্লক করা: ব্যবহারকারীরা এখন কোনও অ্যাপের বিজ্ঞপ্তি সেটিংসের মধ্যে চ্যানেলের সম্পূর্ণ গ্রুপ ব্লক করতে পারবেন। কোনও গ্রুপ ব্লক করা হলে তা শনাক্ত করতে এবং এর ফলে সেই গ্রুপের চ্যানেলগুলির জন্য কোনও বিজ্ঞপ্তি না পাঠাতে আপনি isBlocked() পদ্ধতি ব্যবহার করতে পারবেন।

    এছাড়াও, আপনার অ্যাপ নতুন getNotificationChannelGroup() মেথড ব্যবহার করে বর্তমান চ্যানেল গ্রুপ সেটিংসের জন্য কোয়েরি করতে পারে।

  • সম্প্রচার ইনটেন্টের নতুন ধরন: বিজ্ঞপ্তি চ্যানেল ও চ্যানেল গ্রুপের ব্লকিং স্ট্যাটাস পরিবর্তন হলে, Android সিস্টেম এখন সম্প্রচার ইনটেন্ট পাঠায়। যে অ্যাপের ব্লক করা চ্যানেল বা গ্রুপ আছে, সেটি এইসব ইনটেন্ট শুনতে এবং সেই অনুযায়ী প্রতিক্রিয়া জানাতে পারে। এইসব ইনটেন্ট অ্যাকশন ও এক্সট্রা সম্পর্কে আরও তথ্য পেতে, NotificationManager রেফারেন্সে আপডেট করা কনস্ট্যান্টের তালিকা দেখুন। ব্রডকাস্ট ইনটেন্ট সম্পর্কে প্রতিক্রিয়া জানানোর ব্যাপারে তথ্য পেতে, ব্রডকাস্ট দেখুন।

  • NotificationManager.Policy -এ তিনটি নতুন 'বিরক্ত করবে না' অগ্রাধিকার বিভাগ আছে:

    • PRIORITY_CATEGORY_ALARMS অ্যালার্মকে অগ্রাধিকার দেয়।
    • PRIORITY_CATEGORY_MEDIA মিডিয়া সোর্স থেকে আসা সাউন্ডকে অগ্রাধিকার দেয়, যেমন মিডিয়া ও ভয়েস নেভিগেশন।
    • PRIORITY_CATEGORY_SYSTEM সিস্টেম সাউন্ডকে অগ্রাধিকার দেয়।
  • NotificationManager.Policy-এ সাতটি নতুন 'বিরক্ত-করবে-না' কনস্ট্যান্ট আছে যা আপনি ভিজ্যুয়াল ইন্টারাপশন বন্ধ করতে ব্যবহার করতে পারেন:

    • SUPPRESSED_EFFECT_FULL_SCREEN_INTENT বিজ্ঞপ্তিটি ফুল-স্ক্রিন অ্যাক্টিভিটি লঞ্চ করা থেকে আটকায়।
    • SUPPRESSED_EFFECT_LIGHTS বিজ্ঞপ্তি লাইট ব্লক করে।
    • SUPPRESSED_EFFECT_PEEK বিজ্ঞপ্তি অল্প সময়ের জন্য স্ক্রিনে স্লাইড করে আসা ("পিকিং") আটকায়।
    • SUPPRESSED_EFFECT_STATUS_BAR স্ট্যাটাস বার কাজ করে এমন ডিভাইসে স্ট্যাটাস বারে বিজ্ঞপ্তি দেখানো আটকায়।
    • SUPPRESSED_EFFECT_BADGE ব্যাজিং কাজ করে এমন ডিভাইসে ব্যাজ ব্লক করে। আরও তথ্যের জন্য, বিজ্ঞপ্তি ব্যাজ পরিবর্তন করুন দেখুন।
    • SUPPRESSED_EFFECT_AMBIENT অ্যাম্বিয়েন্ট ডিসপ্লে কাজ করে এমন ডিভাইসে বিজ্ঞপ্তি ব্লক করে।
    • SUPPRESSED_EFFECT_NOTIFICATION_LIST বিজ্ঞপ্তি শেড বা লকস্ক্রিনের মতো তালিকা ভিউ কাজ করে এমন ডিভাইসে তালিকা ভিউতে বিজ্ঞপ্তি দেখানো আটকায়।

একাধিক ক্যামেরা সাপোর্ট ও ক্যামেরা আপডেট

Android 9 ভার্সনে চলা ডিভাইসে, আপনি দুটি বা তার বেশি ফিজিক্যাল ক্যামেরা থেকে একই সাথে স্ট্রিম অ্যাক্সেস করতে পারবেন। ডুয়াল-ফ্রন্ট বা ডুয়াল-ব্যাক ক্যামেরা আছে এমন ডিভাইসে, আপনি এমন উদ্ভাবনী ফিচার তৈরি করতে পারবেন যা শুধুমাত্র একটি ক্যামেরা দিয়ে সম্ভব নয়, যেমন, নির্বিঘ্নে জুম করা, বোকেহ এবং স্টেরিও ভিশন। এছাড়াও, API আপনাকে একটি লজিক্যাল বা ফিউজড ক্যামেরা স্ট্রিম কল করতে দেয় যা অটোমেটিক দু'টি বা তার বেশি ক্যামেরার মধ্যে পরিবর্তন করে।

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

Android 9-এ মাল্টি-ক্যামেরা API FULL বা LIMITED ক্ষমতা সম্পন্ন ডিভাইসের জন্য মোনোক্রোম ক্যামেরায় কাজ করে। Y-কে গ্রেস্কেল, U (Cb)-কে ১২৮ এবং V (Cr)-কে ১২৮ হিসেবে ব্যবহার করে YUV_420_888 ফর্ম্যাটের মাধ্যমে মনোক্ৰোম আউটপুট পাওয়া যায়।

এছাড়াও, Android 9 ভার্সন, কাজ করে এমন ডিভাইসে এক্সটার্নাল USB/UVC ক্যামেরা ব্যবহার করার সুবিধা চালু করে।

ড্রয়েবল ও বিটম্যাপের জন্য ImageDecoder

Android 9-এ ImageDecoder ক্লাস চালু করা হয়েছে, যা ছবি ডিকোড করার জন্য আধুনিক পদ্ধতি প্রদান করে। BitmapFactory এবং BitmapFactory.Options API-এর পরিবর্তে এই ক্লাস ব্যবহার করুন।

ImageDecoder আপনাকে বাইট বাফার, ফাইল বা URI থেকে Drawable বা Bitmap তৈরি করতে দেয়। কোনও ছবি ডিকোড করতে, এনকোড করা ছবির সোর্স সহ প্রথমে createSource() কল করুন। তারপরে, ImageDecoder.Source অবজেক্ট পাস করে decodeDrawable() বা decodeBitmap() কল করুন, যাতে Drawable বা Bitmap তৈরি করা যায়। ডিফল্ট সেটিংস পরিবর্তন করতে, OnHeaderDecodedListener-কে decodeDrawable() বা decodeBitmap()-এ পাস করুন। ImageDecoder কল onHeaderDecoded() ইমেজটির ডিফল্ট দৈর্ঘ্য ও প্রস্থের সাথে, সেগুলি জানা হয়ে গেলে। এনকোড করা ছবি অ্যানিমেটেড GIF বা WebP হলে, decodeDrawable() একটি Drawable রিটার্ন করে যা AnimatedImageDrawable ক্লাসের একটি ইনস্ট্যান্স।

ছবির প্রপার্টি সেট করার জন্য আপনি বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন:

  • ডিকোড করা ছবিকে সঠিক সাইজে স্কেল করতে, টার্গেট ডাইমেনশনকে setTargetSize()-এ পাস করুন। এছাড়াও, আপনি স্যাম্পেল সাইজ ব্যবহার করে ছবি স্কেল করতে পারবেন। সরাসরি setTargetSampleSize()-এ স্যাম্পেল সাইজ পাস করুন।
  • স্কেল করা ছবির রেঞ্জের মধ্যে কোনও ছবি ক্রপ করতে, setCrop() কল করুন।
  • পরিবর্তনযোগ্য বিটম্যাপ তৈরি করতে, true-কে setMutableRequired()-এ পাস করুন।

ImageDecoder আপনাকে কোনও ছবিতে কাস্টমাইজ করা ও জটিল এফেক্ট যোগ করতে দেয় যেমন গোলাকার কোণ বা বৃত্তাকার মাস্ক। আপনি যে ড্রয়িং কমান্ড এক্সিকিউট করতে চান তার জন্য setPostProcessor() ব্যবহার করুন। এটি PostProcessor ক্লাসের একটি ইনস্ট্যান্স।

Animation

Android 9, GIF ও WebP অ্যানিমেটেড ছবি আঁকা ও দেখানোর জন্য AnimatedImageDrawable ক্লাস নিয়ে এসেছে। AnimatedImageDrawable, AnimatedVectorDrawable-এর মতো কাজ করে কারণ রেন্ডার থ্রেড AnimatedImageDrawable-এর অ্যানিমেশন চালায়। এছাড়াও, রেন্ডার থ্রেড ডিকোড করার জন্য একটি ওয়ার্কার থ্রেড ব্যবহার করে, যাতে ডিকোডিং রেন্ডার থ্রেডের অন্যান্য অপারেশনকে বাধা না দেয়। এই ইমপ্লিমেন্টেশন আপনার অ্যাপকে এর আপডেট ম্যানেজ করা বা আপনার অ্যাপের UI থ্রেডে অন্যান্য ইভেন্টের সাথে হস্তক্ষেপ করা ছাড়াই অ্যানিমেটেড ছবি দেখাতে দেয়।

ImageDecoder-এর কোনও ইনস্ট্যান্স ব্যবহার করে AnimatedImageDrawable ডিকোড করা যেতে পারে। নিচে দেওয়া কোড স্নিপেট থেকে কীভাবে ImageDecoder ব্যবহার করে আপনার AnimatedImageDrawable ডিকোড করবেন তা জানতে পারবেন:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

জাভা

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder-এ এমন একাধিক পদ্ধতি রয়েছে যা আপনাকে ছবি আরও পরিবর্তন করতে দেয়। যেমন, আপনি কোনও ছবির চেহারা পরিবর্তন করতে setPostProcessor() পদ্ধতি ব্যবহার করতে পারেন, যেমন, বৃত্তাকার মাস্ক বা গোলাকার কোণ প্রয়োগ করা।

HDR VP9 ভিডিও, HEIF ইমেজ কম্প্রেশন ও মিডিয়া API

Android 9-এ হাই ডায়নামিক রেঞ্জ (HDR) VP9 প্রোফাইল ২-এর জন্য বিল্ট-ইন সহায়তা প্রদান করা হয়, তাই আপনি HDR-সক্ষম ডিভাইসে YouTube, Play Movies এবং অন্যান্য সোর্স থেকে আপনার ব্যবহারকারীদের HDR-এনাবল করা সিনেমা ডেলিভার করতে পারবেন।

এছাড়াও, Android 9-এ হাই এফিশিয়েন্সি ইমেজ ফাইল ফর্ম্যাট (HEIF বা HEIC) ব্যবহার করে ছবি এনকোড করার সুবিধা যোগ করা হয়েছে, যা কম্প্রেশন উন্নত করে এবং স্টোরেজ স্পেস ও নেটওয়ার্ক ডেটা ব্যবহার কমায়। HEIF স্টিল ইমেজ স্যাম্পেল MediaMuxer এবং MediaExtractor ক্লাসে কাজ করে। Android 9 ডিভাইসে প্ল্যাটফর্ম সাপোর্ট থাকার ফলে, আপনার ব্যাকএন্ড সার্ভার থেকে HEIF ছবি পাঠানো ও ব্যবহার করা সহজ। আপনার অ্যাপ শেয়ার ও ডিসপ্লে করার জন্য এই ডেটা ফর্ম্যাটের সাথে মানানসই কিনা তা নিশ্চিত করার পরে, আপনার অ্যাপে ছবি স্টোরেজ ফর্ম্যাট হিসেবে HEIF ব্যবহার করে দেখুন। আপনি ImageDecoder বা BitmapFactory ব্যবহার করে jpeg-কে heic-এ কনভার্ট করতে পারবেন (যা JPEG ফাইল থেকে বিটম্যাপ পায়)। তারপরে, HeifWriter YUV বাইট বাফার থেকে HEIF স্টিল ছবি লিখতে অথবা Surface বা Bitmap-এর ইনস্ট্যান্স ব্যবহার করতে পারবেন।

এছাড়াও, মিডিয়া মেট্রিক AudioTrack, AudioRecord, এবং MediaDrm ক্লাস থেকে উপলভ্য।

Android 9, মেট্রিক, HDCP লেভেল, নিরাপত্তা লেভেল ও সেশনের সংখ্যা পাওয়ার জন্য MediaDRM ক্লাসে পদ্ধতি যোগ করে এবং নিরাপত্তা লেভেল ও সুরক্ষিত স্টপের উপর আরও নিয়ন্ত্রণ যোগ করে। আরও বিবরণের জন্য API Diff রিপোর্ট দেখুন।

Android 9-এ, AAudio API, ব্যবহার, কন্টেন্টের ধরন এবং ইনপুট প্রিসেট সহ বেশ কিছু অতিরিক্ত AAudioStream অ্যাট্রিবিউটের জন্য সহায়তা যোগ করে। এইসব অ্যাট্রিবিউট ব্যবহার করে, আপনি এমন স্ট্রিম তৈরি করতে পারবেন যেগুলি VoIP বা ক্যামকর্ডার অ্যাপ্লিকেশনের জন্য টিউন করা হয়েছে। এছাড়াও, আপনি সেশন আইডি সেট করে সাবমিক্সের সাথে AAudio স্ট্রিম অ্যাসোসিয়েট করতে পারেন, যার মধ্যে এফেক্ট অন্তর্ভুক্ত থাকতে পারে। এফেক্ট কন্ট্রোল করতে AudioEffect API ব্যবহার করুন।

Android 9-এ ডায়নামিক প্রসেসিং-এর জন্য AudioEffect API চালু করা হয়েছে। এই ক্লাসের সাহায্যে, আপনি একাধিক স্টেজ জুড়ে চ্যানেল-ভিত্তিক অডিও এফেক্ট তৈরি করতে পারবেন—এর মধ্যে ইকুয়ালাইজেশন, মাল্টি-ব্যান্ড কম্প্রেশন এবং লিমিটর অন্তর্ভুক্ত। ব্যান্ড ও অ্যাক্টিভ স্টেজের সংখ্যা কনফিগার করা যায় এবং বেশিরভাগ প্যারামিটার রিয়েল-টাইমে কন্ট্রোল করা যায়।

JobScheduler-এ ডেটা খরচের সংবেদনশীলতা

Android 9 থেকে শুরু করে, JobScheduler নেটওয়ার্ক সংক্রান্ত জব আরও ভালোভাবে ম্যানেজ করতে, ক্যারিয়ারের দেওয়া নেটওয়ার্ক স্ট্যাটাস সিগন্যাল ব্যবহার করতে পারে।

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

জব যোগ করার সময়, setEstimatedNetworkBytes(), setPrefetch(), এবং setRequiredNetwork() ব্যবহার করতে ভুলবেন না, যাতে JobScheduler কাজ সঠিকভাবে ম্যানেজ করতে পারে। আপনার জব এক্সিকিউট করার সময়, JobParameters.getNetwork()-এর মাধ্যমে রিটার্ন করা Network অবজেক্ট ব্যবহার করতে ভুলবেন না। তা না হলে, আপনি ডিভাইসের ডিফল্ট নেটওয়ার্ক ব্যবহার করবেন যা আপনার প্রয়োজন পূরণ নাও করতে পারে এবং এর ফলে অনিচ্ছাকৃত ডেটা ব্যবহার হতে পারে।

Neural Networks API 1.1

Android 8.1 (API লেভেল 27)-এ Neural Networks API চালু করা হয়েছে। এর উদ্দেশ্য হল Android-এ ডিভাইস-মধ্যস্থ মেশিন লার্নিংয়ের প্রসেসকে দ্রুততর করা। Android 9 API-কে আরও উন্নত ও প্রসারিত করেছে, এর সাথে নটি নতুন অপারেশনের জন্য সহায়তা যোগ করেছে:

পরিচিত সমস্যা: Android 9 এবং এর পরের যেকোনও ভার্সনে উপলভ্য ANEURALNETWORKS_PAD অপারেশনে টেনসর পাস করার সময়, NNAPI-এর আউটপুট ANEURALNETWORKS_TENSOR_QUANT8_ASYMM TensorFlow Lite-এর মতো হাই-লেভেল মেশিন লার্নিং ফ্রেমওয়ার্কের আউটপুটের সাথে নাও মিলতে পারে। পরিবর্তে, সমস্যা সমাধান না হওয়া পর্যন্ত আপনাকে শুধু ANEURALNETWORKS_TENSOR_FLOAT32 পাস করতে হবে।

এছাড়াও, API একটি নতুন ফাংশন, ANeuralNetworksModel_relaxComputationFloat32toFloat16(), যোগ করে যা আপনাকে নির্দিষ্ট করতে দেয় যে ANEURALNETWORKS_TENSOR_FLOAT32 IEEE 754 16-বিট ফ্লোটিং-পয়েন্ট ফর্ম্যাটের মতো কম রেঞ্জ ও প্রিসিশন সহ গণনা করবেন কিনা।

অটোফিল ফ্রেমওয়ার্ক

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

নিরাপত্তা সংক্রান্ত উন্নতি

Android 9-এ বেশ কিছু নিরাপত্তা ফিচার যোগ করা হয়েছে, যা নিম্নলিখিত বিভাগে সংক্ষিপ্তভাবে বর্ণনা করা হয়েছে:

Android প্রোটেক্টেড কনফার্মেশন

Android 9 বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইস আপনাকে Android সুরক্ষিত কনফার্মেশন ব্যবহার করার সুবিধা দেয়। এই ওয়ার্কফ্লো ব্যবহার করার সময়, আপনার অ্যাপ ব্যবহারকারীকে একটি প্রম্পট দেখায় এবং একটি সংক্ষিপ্ত বিবৃতি অনুমোদন করতে বলে। এই স্টেটমেন্ট অ্যাপকে এটি নিশ্চিত করতে সাহায্য করে যে ব্যবহারকারী পেমেন্ট করার মতো সংবেদনশীল ট্রানজ্যাকশন সম্পূর্ণ করতে চান।

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

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

Android সুরক্ষিত কনফার্মেশনের জন্য সহায়তা যোগ করা সংক্রান্ত নির্দেশিকা পেতে, Android সুরক্ষিত কনফার্মেশন নির্দেশিকা দেখুন।

একত্রিত বায়োমেট্রিক যাচাইকরণ ডায়ালগ

Android 9-এ, সিস্টেম আপনার অ্যাপের হয়ে বায়োমেট্রিক যাচাইকরণ ডায়ালগ প্রদান করে। এই কার্যকারিতা ডায়ালগের জন্য একটি স্ট্যান্ডার্ড লুক, ফিল ও প্লেসমেন্ট তৈরি করে। এর ফলে ব্যবহারকারীরা আরও আত্মবিশ্বাসের সাথে যাচাইকরণ করতে পারেন যে তারা একটি বিশ্বস্ত বায়োমেট্রিক ক্রেডেনশিয়াল চেকারের বিরুদ্ধে যাচাইকরণ করছেন।

আপনার অ্যাপ যদি ব্যবহারকারীদের ফিঙ্গারপ্রিন্ট যাচাইকরণ ডায়ালগ দেখাতে FingerprintManager ব্যবহার করে, তাহলে এর পরিবর্তে BiometricPrompt ব্যবহার করুন। BiometricPrompt যাচাইকরণ ডায়লগ দেখানোর জন্য সিস্টেমের উপর নির্ভর করে। এছাড়াও, ব্যবহারকারী যে ধরনের বায়োমেট্রিক যাচাইকরণ বেছে নিয়েছেন, সেই অনুযায়ী এটি নিজের আচরণ পরিবর্তন করে নেয়।

হার্ডওয়্যার নিরাপত্তা মডিউল

Android 9 বা তার পরবর্তী যেকোনও ভার্সন ইনস্টল করা মানানসই ডিভাইসে StrongBox KeyMint (আগে Keymaster নামে পরিচিত ছিল) থাকতে পারে। এটি হল KeyMint (আগে Keymaster নামে পরিচিত ছিল) HAL-এর একটি প্রয়োগ যা হার্ডওয়্যার নিরাপত্তা মডিউলে থাকে। মডিউলে নিম্নলিখিত বিষয়গুলি রয়েছে:

  • এর নিজস্ব CPU.
  • সুরক্ষিত স্টোরেজ।
  • একটি প্রকৃত র‍্যান্ডম-নাম্বার জেনারেটর।
  • প্যাকেজ ট্যাম্পারিং ও অ্যাপের অননুমোদিত সাইডলোডিং প্রতিরোধ করার জন্য অতিরিক্ত ব্যবস্থা নেওয়া হয়।

StrongBox KeyMint-এ সেভ করা কী চেক করার সময়, সিস্টেম ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (TEE)-এর সাথে কী-এর ইন্টিগ্রিটি কনফার্ম করে।

StrongBox KeyMint ব্যবহার করা সম্পর্কে আরও জানতে, হার্ডওয়্যার নিরাপত্তা মডিউল দেখুন।

কীস্টোরে সুরক্ষিত কী ইমপোর্ট করা

Android 9, ASN.1‑এনকোডেড কী ফর্ম্যাট ব্যবহার করে কীস্টোরে নিরাপদে এনক্রিপ্ট করা কী ইমপোর্ট করার ক্ষমতা যোগ করার মাধ্যমে অতিরিক্ত কী ডিক্রিপশন সুরক্ষা প্রদান করে। তারপরে KeyMint Keystore-এ কীগুলি ডিক্রিপ্ট করে, তাই কীগুলির কন্টেন্ট ডিভাইসের হোস্ট মেমরিতে কখনও প্লেনটেক্সট হিসেবে দেখা যায় না।

কীভাবে আরও নিরাপদে এনক্রিপ্ট করা কী ইমপোর্ট করতে হয় সেই সম্পর্কে আরও জানুন।

কী রোটেশন সহ APK সিগনেচার স্কিম

Android 9-এ APK Signature Scheme v3-এর জন্য সহায়তা যোগ করা হয়েছে। এই স্কিমে প্রতিটি স্বাক্ষরকারী সার্টিফিকেটের জন্য স্বাক্ষরকারী ব্লকে একটি প্রুফ-অফ-রোটেশন রেকর্ড অন্তর্ভুক্ত করার বিকল্প আছে। এই সুবিধা আপনার অ্যাপকে নতুন সাইনিং সার্টিফিকেট দিয়ে সাইন করতে সাহায্য করে। এটি APK ফাইলের আগের সাইনিং সার্টিফিকেটকে বর্তমান সাইনিং সার্টিফিকেটের সাথে লিঙ্ক করে।

কীভাবে apksigner ব্যবহার করে কী রোটেট করতে হয় সেই সম্পর্কে আরও জানুন।

শুধু আনলক করা ডিভাইসে কী ডিক্রিপ্ট করার অনুমতি দেওয়ার বিকল্প

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

ডিভাইস লক করা থাকাকালীন কোনও কী যাতে ডিক্রিপ্ট না হয়ে যায়, সেই জন্য setUnlockedDeviceRequired() মেথডে true পাস করে ফ্ল্যাগ চালু করুন। এই ধাপটি সম্পূর্ণ করার পরে, ব্যবহারকারীর স্ক্রিন লক করা থাকলে, এই কী ব্যবহার করে ডেটা ডিক্রিপ্ট করা বা সাইন করার যেকোনও প্রচেষ্টা ব্যর্থ হয়। লক করা ডিভাইস অ্যাক্সেস করার আগে পিন, পাসওয়ার্ড, ফিঙ্গারপ্রিন্ট বা অন্য কোনও বিশ্বস্ত ফ্যাক্টর প্রয়োজন হয়।

পুরনো এনক্রিপশন সংক্রান্ত সহায়তা

Keymaster 4 সহ Android 9 ডিভাইস, Triple Data Encryption Algorithm বা Triple DES-এর সাথে কাজ করে। আপনার অ্যাপ যদি এমন লিগ্যাসি সিস্টেমের সাথে ইন্টারঅপারেট করে যার জন্য Triple DES প্রয়োজন, তাহলে সংবেদনশীল ক্রেডেনশিয়াল এনক্রিপ্ট করার সময় এই ধরনের সাইফার ব্যবহার করুন।

আপনার অ্যাপ আরও সুরক্ষিত করার ব্যাপারে আরও জানতে, Android-এর জন্য নিরাপত্তা ডেভেলপার দেখুন।

WPS বন্ধ করা

নিরাপত্তা সংক্রান্ত কারণে ওয়াই-ফাই প্রোটেকটেড সেট-আপ (WPS) বন্ধ করে দেওয়া হয়েছে।

Android ব্যাক-আপ

Android 9-এ ব্যাক-আপ ও রিস্টোর করার সাথে সম্পর্কিত নতুন ফাংশনালিটি ও ডেভেলপার বিকল্প যোগ করা হয়েছে। এইসব পরিবর্তন সম্পর্কে বিস্তারিত বিবরণ নিম্নলিখিত বিভাগে দেওয়া আছে।

ক্লায়েন্ট-সাইড এনক্রিপশন ব্যাক-আপ

Android 9-এ ক্লায়েন্ট-সাইড সিক্রেট ব্যবহার করে Android ব্যাক-আপ এনক্রিপ্ট করার সুবিধা যোগ করা হয়েছে। নিম্নলিখিত শর্ত পূরণ হলে এই সহায়তা অটোমেটিক চালু হয়ে যায়:

গোপনীয়তা সংক্রান্ত এই ব্যবস্থা চালু করা থাকলে, ব্যবহারকারীর ডিভাইস থেকে নেওয়া ব্যাক-আপ থেকে ডেটা রিস্টোর করার জন্য ডিভাইসের পিন, প্যাটার্ন বা পাসওয়ার্ড প্রয়োজন হয়। এই ফিচারের পেছনের টেকনোলজি সম্পর্কে আরও জানতে, Google Cloud Key Vault পরিষেবা হোয়াইটপেপার দেখুন।

ব্যাক-আপ নেওয়ার জন্য ডিভাইসের কী কী কন্ডিশন থাকতে হবে তা নির্ধারণ করা

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

Android ডিভাইসে ডেটা ব্যাক-আপ নেওয়া সম্পর্কে আরও জানতে, ডেটা ব্যাক-আপ ওভারভিউ দেখুন।

অ্যাক্সেসিবিলিটি

Android 9-এ অ্যাক্সেসিবিলিটি ফ্রেমওয়ার্কের উন্নতি করা হয়েছে, এর ফলে আপনার অ্যাপের ব্যবহারকারীদের আরও ভালো অভিজ্ঞতা প্রদান করা সহজ হয়ে যায়।

নেভিগেশন সিম্যান্টিক্স

Android 9-এ যোগ করা অ্যাট্রিবিউট, অ্যাক্সেসিবিলিটি পরিষেবা, বিশেষ করে স্ক্রিন রিডার কীভাবে স্ক্রিনের এক অংশ থেকে অন্য অংশে নেভিগেট করবে তা আপনার পক্ষে আরও সহজে নির্ধারণ করতে সাহায্য করে। এইসব অ্যাট্রিবিউট দৃষ্টিশক্তির সমস্যা থাকা ব্যবহারকারীদের আপনার অ্যাপের UI-তে টেক্সট দ্রুত ব্রাউজ করতে এবং কোনও কিছু বেছে নিতে সাহায্য করতে পারে।

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

অ্যাক্সেসিবিলিটি প্যানেলের নাম

Android 8.1 (API লেভেল 27) ও তার আগের যেকোনও ভার্সনে, অ্যাক্টিভিটি একটি ফ্র্যাগমেন্টের বদলে অন্য ফ্র্যাগমেন্ট ব্যবহার করলে, স্ক্রিনের নির্দিষ্ট প্যানেল কখন আপডেট করা হয়েছে তা অ্যাক্সেসিবিলিটি পরিষেবা সবসময় নির্ধারণ করতে পারে না। প্যানেলে লজিক্যালি গ্রুপ করা, দৃশ্যত সম্পর্কিত UI এলিমেন্ট থাকে যেগুলি সাধারণত একটি ফ্র্যাগমেন্ট নিয়ে গঠিত হয়।

Android 9-এ, আপনি এইসব প্যানেলের জন্য অ্যাক্সেসিবিলিটি প্যান টাইটেল অথবা আলাদাভাবে শনাক্তযোগ্য টাইটেল প্রদান করতে পারবেন। কোনও প্যানে অ্যাক্সেসিবিলিটি প্যানেলের শীর্ষক থাকলে, প্যানেল পরিবর্তন হলে অ্যাক্সেসিবিলিটি পরিষেবা আরও বিস্তারিত তথ্য পায়। এই ক্ষমতা পরিষেবাগুলিকে UI-তে কী পরিবর্তন করা হয়েছে সেই সম্পর্কে ব্যবহারকারীকে আরও বিস্তারিত তথ্য প্রদান করতে দেয়।

কোনও প্যানেলের নাম নির্দিষ্ট করতে, android:accessibilityPaneTitle অ্যাট্রিবিউট ব্যবহার করুন। এছাড়াও, setAccessibilityPaneTitle() ব্যবহার করে রানটাইমে রিপ্লেস করা UI প্যানেলের টাইটেল আপডেট করতে পারবেন। যেমন, আপনি Fragment অবজেক্টের কন্টেন্ট অংশের জন্য শীর্ষক দিতে পারেন।

হেডিং-ভিত্তিক নেভিগেশন

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

গ্রুপ নেভিগেশন ও আউটপুট

স্ক্রিন রিডাররা ঐতিহ্যগতভাবে android:focusable অ্যাট্রিবিউট ব্যবহার করে নির্ধারণ করে যে কখন তাদের একটি ViewGroup বা View অবজেক্টের সংগ্রহকে একটি একক ইউনিট হিসেবে পড়তে হবে। এর ফলে, ব্যবহারকারীরা বুঝতে পারবেন যে ভিউগুলি একে অপরের সাথে যৌক্তিকভাবে সম্পর্কিত।

Android 8.1 ও তার আগের যেকোনও ভার্সনে, আপনাকে প্রতিটি View অবজেক্টকে ViewGroup-এর মধ্যে ফোকাস করা যায় না হিসেবে এবং ViewGroup-কে ফোকাস করা যায় হিসেবে চিহ্নিত করতে হবে। এই ব্যবস্থার কারণে View-এর কিছু ইনস্ট্যান্সকে এমনভাবে ফোকাস করার উপযুক্ত হিসেবে চিহ্নিত করা হয়েছে যা কীবোর্ড নেভিগেশনকে আরও কঠিন করে তুলেছে।

Android 9 থেকে শুরু করে, আপনি সেইসব পরিস্থিতিতে android:focusable অ্যাট্রিবিউটের পরিবর্তে android:screenReaderFocusable অ্যাট্রিবিউট ব্যবহার করতে পারবেন যেখানে View অবজেক্টকে ফোকাসযোগ্য করে তোলার ফলে অবাঞ্ছিত পরিণতি হতে পারে। android:screenReaderFocusable বা android:focusable থেকে true সেট করা আছে এমন সব এলিমেন্টে স্ক্রিন রিডার ফোকাস করে।

সুবিধাজনক অ্যাকশন

Android 9 ব্যবহারকারীর হয়ে সুবিধা অনুযায়ী অ্যাকশন পারফর্ম করার জন্য সহায়তা যোগ করে:

টুলটিপের সাথে ইন্টার‍্যাকশন
অ্যাক্সেসিবিলিটি ফ্রেমওয়ার্কে যোগ করা ফিচার আপনাকে অ্যাপের UI-তে সহায়ক টেক্সট অ্যাক্সেস করতে দেয়। টুলটিপের টেক্সট পড়তে getTooltipText() ব্যবহার করুন এবং View-এর ইনস্ট্যান্সকে টুলটিপ দেখাতে বা লুকিয়ে রাখতে নির্দেশ দিতে ACTION_SHOW_TOOLTIP ও ACTION_HIDE_TOOLTIP ব্যবহার করুন।
যোগ করা গ্লোবাল অ্যাকশন
Android 9-এ AccessibilityService ক্লাসে দুটি অতিরিক্ত ডিভাইস অ্যাকশনের জন্য সহায়তা দেওয়া হয়েছে। আপনার পরিষেবা ব্যবহারকারীদের ডিভাইস লক করতে এবং GLOBAL_ACTION_LOCK_SCREEN ও GLOBAL_ACTION_TAKE_SCREENSHOT অ্যাকশন ব্যবহার করে স্ক্রিনশট নিতে সাহায্য করতে পারে।

উইন্ডো পরিবর্তনের বিবরণ

Android 9, কোনও অ্যাপ একসাথে একাধিক উইন্ডো রিড্র করে নিলে, অ্যাপের উইন্ডো আপডেট ট্র্যাক করা আরও সহজ করে তোলে। কোনও TYPE_WINDOWS_CHANGED ইভেন্ট ঘটলে, উইন্ডো কীভাবে পরিবর্তিত হয়েছে তা নির্ধারণ করতে getWindowChanges() API ব্যবহার করুন। মাল্টিউইন্ডো আপডেট চলাকালীন, প্রতিটি উইন্ডো ইভেন্টের নিজস্ব সেট তৈরি করে। getSource() মেথড প্রতিটি ইভেন্টের সাথে যুক্ত উইন্ডোর মূল ভিউ রিটার্ন করে।

কোনও অ্যাপের View অবজেক্টের জন্য অ্যাক্সেসিবিলিটি প্যান টাইটেল নির্দিষ্ট করা থাকলে, অ্যাপের UI আপডেট করা হলে আপনার পরিষেবা তা চিনতে পারবে। কোনও TYPE_WINDOW_STATE_CHANGED ইভেন্ট ঘটলে, উইন্ডো কীভাবে পরিবর্তিত হয়েছে তা নির্ধারণ করতে getContentChangeTypes() থেকে পাওয়া ধরন ব্যবহার করুন। যেমন, কোনও প্যানেলের নতুন শীর্ষক থাকলে অথবা কোনও প্যানেল আর দেখা না গেলে, ফ্রেমওয়ার্ক তা শনাক্ত করতে পারে।

রোটেশন

অনিচ্ছাকৃত রোটেশন বন্ধ করতে, আমরা এমন একটি মোড যোগ করেছি যা ডিভাইসের পজিশন পরিবর্তন হলেও বর্তমান অরিয়েন্টেশন পিন করে। সিস্টেম বারে একটি বোতাম প্রেস করে ব্যবহারকারীরা প্রয়োজনমতো ম্যানুয়ালি রোটেট করার ট্রিগার করতে পারবেন।

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

আরও বিবরণের জন্য, সংশ্লিষ্ট ব্যবহার পরিবর্তন দেখুন।

মোবাইল ঘুরিয়ে নতুন রোটেশন মোড দেখানো হচ্ছে, যার ফলে ব্যবহারকারীরা ম্যানুয়ালি রোটেশন ট্রিগার করতে পারবেন

নতুন রোটেট মোড ব্যবহার করে, ব্যবহারকারীরা সিস্টেম বারে একটি বোতাম ব্যবহার করে প্রয়োজনমতো ম্যানুয়ালি রোটেট করার ট্রিগার করতে পারবেন।

টেক্সট

Android 9-এ টেক্সট সম্পর্কিত নিম্নলিখিত ফিচারগুলি প্ল্যাটফর্মে যোগ করা হয়েছে:

  • আগে থেকে কম্পিউট করা টেক্সট: The PrecomputedText ক্লাসটি প্রয়োজনীয় তথ্য আগে থেকে কম্পিউট ও ক্যাশে করার সুবিধা দিয়ে টেক্সট-রেন্ডারিং পারফর্ম্যান্স উন্নত করে। এছাড়াও, এটি আপনার অ্যাপকে মূল থ্রেড থেকে টেক্সট লেআউট পারফর্ম করতে সক্ষম করে।

  • ম্যাগনিফায়ার: Magnifier ক্লাস হল একটি প্ল্যাটফর্ম উইজেট যা ম্যাগনিফায়ার এপিআই প্রদান করে, এর ফলে সব অ্যাপ জুড়ে একটি সামঞ্জস্যপূর্ণ ম্যাগনিফায়ার-ফিচার অভিজ্ঞতা পাওয়া যায়।

  • স্মার্ট লিঙ্কফাই: Android 9 ভার্সন TextClassifier ক্লাসকে উন্নত করে, যা বেছে নেওয়া টেক্সটে কিছু এন্টিটি শনাক্ত করতে মেশিন লার্নিং ব্যবহার করে এবং অ্যাকশন সাজেস্ট করে। যেমন, TextClassifier আপনার অ্যাপকে এটি শনাক্ত করতে সক্ষম করতে পারে যে ব্যবহারকারী একটি ফোন নম্বর বেছে নিয়েছেন। আপনার অ্যাপ তখন সাজেশন দিতে পারে যে ব্যবহারকারী যেন সেই নম্বর ব্যবহার করে ফোন কল করেন। TextClassifier-এর ফিচারগুলি Linkify ক্লাসের কার্যকারিতা প্রতিস্থাপন করে।

  • টেক্সট লেআউট: বিভিন্ন সুবিধা পদ্ধতি ও অ্যাট্রিবিউট আপনার UI ডিজাইন প্রয়োগ করা সহজ করে তোলে। বিবরণের জন্য, TextView-এর রেফারেন্স ডকুমেন্টেশন দেখুন।

DEX ফাইলের ART আগে-থেকে-করা কনভার্সন

Android 9 বা তার পরের যেকোনও ভার্সনে চলা ডিভাইসে, Android রানটাইম (ART) আগে থেকেই কম্পাইল করা Dalvik Executable ফর্ম্যাট (DEX) ফাইলকে আরও অপ্টিমাইজ করে। এটি অ্যাপ প্যাকেজের মধ্যে থাকা DEX ফাইলকে আরও কম্প্যাক্ট উপস্থাপনায় কনভার্ট করে। এই পরিবর্তনের ফলে আপনার অ্যাপ আরও দ্রুত চালু হবে এবং কম ডিস্ক স্পেস ও RAM ব্যবহার করবে।

এই উন্নতি বিশেষ করে কম দামের ডিভাইসের ক্ষেত্রে বেশি সুবিধা দেয়, কারণ এতে ডিস্ক I/O স্পিড কম থাকে।

অন-ডিভাইস সিস্টেম ট্রেসিং

Android 9 আপনাকে ডিভাইস থেকে সিস্টেম ট্রেস রেকর্ড করতে দেয়, তারপর ডেভেলপমেন্ট টিমের সাথে এই রেকর্ডিংয়ের রিপোর্ট শেয়ার করতে দেয়। এই রিপোর্ট HTML সহ একাধিক ফর্ম্যাটে কাজ করে।

এইসব ট্রেস সংগ্রহ করার মাধ্যমে, আপনার অ্যাপের প্রসেস ও থ্রেড সম্পর্কিত টাইমিং ডেটা ক্যাপচার করতে এবং বিশ্বব্যাপী গুরুত্বপূর্ণ ডিভাইস স্ট্যাটাসের অন্যান্য ধরন দেখতে পারবেন।

এই টুল সম্পর্কে আরও জানতে, ডিভাইসে সিস্টেম ট্রেসিং পারফর্ম করা দেখুন।