অ্যান্ড্রয়েড 8.0 (API লেভেল 26) ব্যবহারকারী এবং ডেভেলপারদের জন্য বিভিন্ন ধরনের নতুন বৈশিষ্ট্য এবং ক্ষমতা প্রবর্তন করে। এই নথিটি ডেভেলপারদের জন্য নতুন কী তা হাইলাইট করে৷
প্ল্যাটফর্ম পরিবর্তনগুলি আপনার অ্যাপ্লিকেশানগুলিকে প্রভাবিত করতে পারে এমন অঞ্চলগুলি সম্পর্কে জানতে Android 8.0 আচরণের পরিবর্তনগুলিও পরীক্ষা করে দেখুন৷
ব্যবহারকারীর অভিজ্ঞতা
পিকচার-ইন-পিকচার মোড
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) পিকচার-ইন-পিকচার (পিআইপি) মোডে ক্রিয়াকলাপ চালু করার অনুমতি দেয়। PIP হল একটি বিশেষ ধরনের মাল্টি-উইন্ডো মোড যা বেশিরভাগ ভিডিও প্লেব্যাকের জন্য ব্যবহৃত হয়। পিআইপি মোড মূলত শুধুমাত্র অ্যান্ড্রয়েড টিভির জন্য উপলব্ধ ছিল; অ্যান্ড্রয়েড 8.0 অন্যান্য অ্যান্ড্রয়েড ডিভাইসে বৈশিষ্ট্যটি উপলব্ধ করে।
যখন কোনো অ্যাক্টিভিটি পিআইপি মোডে থাকে, তখন সেটি পজ করা অবস্থায় থাকে, কিন্তু কন্টেন্ট দেখানো চালিয়ে যেতে হবে। এই কারণে, আপনার নিশ্চিত হওয়া উচিত যে আপনার অ্যাপটি তার onPause()
হ্যান্ডলারে প্লেব্যাককে বিরতি দিচ্ছে না। পরিবর্তে, আপনি onStop()
এ ভিডিও পজ করুন এবং onStart()
এ প্লেব্যাক পুনরায় শুরু করুন। আরও তথ্যের জন্য, মাল্টি-উইন্ডো লাইফসাইকেল দেখুন।
আপনার কার্যকলাপ পিআইপি মোড ব্যবহার করতে পারে তা নির্দিষ্ট করতে, ম্যানিফেস্টে android:supportsPictureInPicture
সত্য হিসাবে সেট করুন। (Android 8.0 দিয়ে শুরু করে, PIP-এর জন্য android:resizeableActivity
ম্যানিফেস্ট অ্যাট্রিবিউটের প্রয়োজন হয় না। তবে, যদি আপনার কার্যকলাপ অন্যান্য মাল্টি-উইন্ডো মোড সমর্থন করে তবে আপনাকে অবশ্যই android:resizeableActivity
কে `true`-এ সেট করতে হবে।)
Android 8.0 (API লেভেল 26) একটি নতুন অবজেক্ট, PictureInPictureParams
প্রবর্তন করে, যেটি আপনি PIP পদ্ধতিতে পাস করেন যাতে উল্লেখ করা যায় যে একটি ক্রিয়াকলাপ PIP মোডে থাকলে কীভাবে আচরণ করা উচিত। এই বস্তুটি বৈশিষ্ট্য নির্দিষ্ট করে যেমন কার্যকলাপের পছন্দের অনুপাত।
পিকচার-ইন-পিকচার যোগে বর্ণিত বিদ্যমান পিআইপি পদ্ধতিগুলি এখন শুধুমাত্র অ্যান্ড্রয়েড টিভিতে নয়, সমস্ত অ্যান্ড্রয়েড ডিভাইসে ব্যবহার করা যেতে পারে। উপরন্তু, Android 8.0 PIP মোড সমর্থন করার জন্য নিম্নলিখিত পদ্ধতিগুলি প্রদান করে:
-
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: কার্যকলাপকে পিকচার-ইন-পিকচার মোডে রাখে। কার্যকলাপের আকৃতির অনুপাত এবং অন্যান্য কনফিগারেশন সেটিংস args দ্বারা নির্দিষ্ট করা হয়। যদি args এর কোনো ক্ষেত্র খালি থাকে, তাহলে সিস্টেমটি সেই মানগুলি ব্যবহার করে যেটি আপনি শেষবারActivity.setPictureInPictureParams()
কল করেছিলেন।নির্দিষ্ট কার্যকলাপ পর্দার একটি কোণে স্থাপন করা হয়; স্ক্রীনের বাকি অংশটি স্ক্রিনে থাকা পূর্ববর্তী কার্যকলাপে পূর্ণ। PIP মোডে প্রবেশ করা কার্যকলাপটি বিরতি দেওয়া অবস্থায় যায়, কিন্তু শুরু হয়। ব্যবহারকারী যদি পিআইপি কার্যকলাপে ট্যাপ করে, সিস্টেমটি ব্যবহারকারীর সাথে যোগাযোগ করার জন্য একটি মেনু দেখায়; PIP অবস্থায় থাকা অবস্থায় কোনো স্পর্শ ইভেন্ট কার্যকলাপে পৌঁছায় না।
-
Activity.setPictureInPictureParams()
: একটি কার্যকলাপের PIP কনফিগারেশন সেটিংস আপডেট করে। যদি কার্যকলাপটি বর্তমানে PIP মোডে থাকে, সেটিংস আপডেট করা হয়; কার্যকলাপের অনুপাত পরিবর্তন হলে এটি কার্যকর। যদি কার্যকলাপটি PIP মোডে না থাকে, তাহলে আপনি যেenterPictureInPictureMode()
পদ্ধতিতে কল করেন তা নির্বিশেষে এই কনফিগারেশন সেটিংস ব্যবহার করা হয়।
বিজ্ঞপ্তি
Android 8.0 (API স্তর 26) এ, আমরা বিজ্ঞপ্তি আচরণ এবং সেটিংস পরিচালনা করার একটি সহজ এবং আরও সামঞ্জস্যপূর্ণ উপায় প্রদান করতে বিজ্ঞপ্তিগুলিকে পুনরায় ডিজাইন করেছি৷ এই পরিবর্তনগুলি অন্তর্ভুক্ত:
- বিজ্ঞপ্তি চ্যানেল: Android 8.0 বিজ্ঞপ্তি চ্যানেলগুলি প্রবর্তন করে যা আপনাকে প্রতিটি ধরণের বিজ্ঞপ্তির জন্য একটি ব্যবহারকারী-কাস্টমাইজযোগ্য চ্যানেল তৈরি করতে দেয় যা আপনি প্রদর্শন করতে চান৷ ইউজার ইন্টারফেস নোটিফিকেশন চ্যানেলকে নোটিফিকেশন ক্যাটাগরি হিসেবে উল্লেখ করে। বিজ্ঞপ্তি চ্যানেলগুলি কীভাবে প্রয়োগ করতে হয় তা শিখতে, বিজ্ঞপ্তি চ্যানেল পরিচালনা দেখুন।
- বিজ্ঞপ্তি বিন্দু: Android 8.0 অ্যাপ লঞ্চার আইকনে ডট বা ব্যাজ প্রদর্শনের জন্য সমর্থন প্রবর্তন করে। বিজ্ঞপ্তি বিন্দুগুলি বিজ্ঞপ্তিগুলির উপস্থিতি প্রতিফলিত করে যা ব্যবহারকারী এখনও খারিজ বা কাজ করেননি। বিজ্ঞপ্তি ডট দিয়ে কিভাবে কাজ করবেন তা জানতে, বিজ্ঞপ্তি ব্যাজ দেখুন।
- স্নুজিং: ব্যবহারকারীরা বিজ্ঞপ্তিগুলিকে স্নুজ করতে পারে, যার ফলে সেগুলি পুনরায় উপস্থিত হওয়ার আগে কিছু সময়ের জন্য অদৃশ্য হয়ে যায়। বিজ্ঞপ্তিগুলি একই স্তরের গুরুত্বের সাথে পুনরায় উপস্থিত হয় যার সাথে তারা প্রথম উপস্থিত হয়েছিল৷ অ্যাপ্লিকেশানগুলি একটি স্নুজ করা বিজ্ঞপ্তি অপসারণ বা আপডেট করতে পারে, কিন্তু একটি স্নুজ করা বিজ্ঞপ্তি আপডেট করার ফলে এটি পুনরায় প্রদর্শিত হবে না৷
- বিজ্ঞপ্তির সময়সীমা:
setTimeoutAfter()
ব্যবহার করে একটি বিজ্ঞপ্তি তৈরি করার সময় আপনি একটি টাইমআউট সেট করতে পারেন। আপনি একটি সময়কাল নির্দিষ্ট করার জন্য এই পদ্ধতিটি ব্যবহার করতে পারেন যার পরে একটি বিজ্ঞপ্তি বাতিল করা উচিত। প্রয়োজন হলে, নির্দিষ্ট সময়সীমা শেষ হওয়ার আগে আপনি একটি বিজ্ঞপ্তি বাতিল করতে পারেন। - বিজ্ঞপ্তি সেটিংস: আপনি
Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
ব্যবহার করে একটি বিজ্ঞপ্তি থেকে আপনার অ্যাপের বিজ্ঞপ্তি সেটিংসে একটি লিঙ্ক তৈরি করার সময় প্রদর্শিত পাঠ্যটি সেট করতেsetSettingsText()
কল করতে পারেন৷INTENT_CATEGORY_NOTIFICATION_PREFERENCES অভিপ্রায়৷ আপনার অ্যাপটি ব্যবহারকারীদের কাছে প্রদর্শন করা আবশ্যক সেটিংস ফিল্টার করার অভিপ্রায়ে সিস্টেম নিম্নলিখিত অতিরিক্তগুলি প্রদান করতে পারে:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
, এবংNOTIFICATION_ID
৷ - বিজ্ঞপ্তি বরখাস্ত করা: ব্যবহারকারীরা নিজেরাই বিজ্ঞপ্তিগুলি খারিজ করতে পারে এবং অ্যাপ্লিকেশনগুলি প্রোগ্রামগতভাবে সেগুলি সরাতে পারে।
NotificationListenerService
ক্লাস থেকেonNotificationRemoved()
পদ্ধতি প্রয়োগ করে আপনি কখন একটি বিজ্ঞপ্তি খারিজ করা হয় এবং কেন এটি খারিজ করা হয় তা নির্ধারণ করতে পারেন। - পটভূমির রঙ: আপনি একটি বিজ্ঞপ্তির জন্য একটি পটভূমি রঙ সেট এবং সক্ষম করতে পারেন। আপনার শুধুমাত্র চলমান কাজের জন্য বিজ্ঞপ্তিতে এই বৈশিষ্ট্যটি ব্যবহার করা উচিত যা ব্যবহারকারীর জন্য এক নজরে দেখার জন্য গুরুত্বপূর্ণ। উদাহরণস্বরূপ, আপনি ড্রাইভিং নির্দেশাবলী সম্পর্কিত বিজ্ঞপ্তিগুলির জন্য একটি পটভূমির রঙ সেট করতে পারেন, অথবা একটি ফোন কল চলছে৷ আপনি
setColor()
ব্যবহার করে পছন্দসই পটভূমির রঙ সেট করতে পারেন। এটি করার ফলে আপনি একটি বিজ্ঞপ্তির জন্য একটি ব্যাকগ্রাউন্ড কালার ব্যবহার সক্ষম করতেsetColorized()
ব্যবহার করতে পারবেন। - মেসেজিং স্টাইল: অ্যান্ড্রয়েড 8.0-এ,
MessagingStyle
ক্লাস ব্যবহার করে এমন বিজ্ঞপ্তিগুলি তাদের সঙ্কুচিত আকারে আরও সামগ্রী প্রদর্শন করে। আপনার মেসেজিং-সম্পর্কিত বিজ্ঞপ্তিগুলির জন্যMessagingStyle
ক্লাস ব্যবহার করা উচিত। আপনি মেসেজিং-সম্পর্কিত বিজ্ঞপ্তিতে ঐতিহাসিক বার্তা যোগ করে একটি কথোপকথনের প্রসঙ্গ প্রদান করতেaddHistoricMessage()
পদ্ধতি ব্যবহার করতে পারেন।
অটোফিল ফ্রেমওয়ার্ক
অ্যাকাউন্ট তৈরি, লগইন এবং ক্রেডিট কার্ড লেনদেন সময় নেয় এবং ত্রুটির প্রবণ হয়। ব্যবহারকারীরা সহজেই এমন অ্যাপ্লিকেশনগুলির সাথে হতাশ হতে পারেন যেগুলির জন্য এই ধরণের পুনরাবৃত্তিমূলক কাজগুলির প্রয়োজন হয়৷
Android 8.0 (API লেভেল 26) অটোফিল ফ্রেমওয়ার্ক প্রবর্তনের মাধ্যমে ফর্মগুলি পূরণ করা, যেমন লগইন এবং ক্রেডিট কার্ড ফর্মগুলিকে সহজ করে তোলে৷ ব্যবহারকারী অটোফিল নির্বাচন করার পরে বিদ্যমান এবং নতুন অ্যাপগুলি অটোফিল ফ্রেমওয়ার্কের সাথে কাজ করে৷
ফ্রেমওয়ার্কের সাথে আপনার অ্যাপ কীভাবে কাজ করে তা অপ্টিমাইজ করতে আপনি কিছু পদক্ষেপ নিতে পারেন। আরও তথ্যের জন্য, অটোফিল ফ্রেমওয়ার্ক ওভারভিউ দেখুন।
ডাউনলোডযোগ্য ফন্ট
Android 8.0 (API লেভেল 26) এবং Android সাপোর্ট লাইব্রেরি 26 আপনাকে APK-এ ফন্ট বান্ডিল করার পরিবর্তে অথবা APK-কে ফন্ট ডাউনলোড করতে দেওয়ার পরিবর্তে একটি প্রদানকারী অ্যাপ্লিকেশন থেকে ফন্টের অনুরোধ করতে দেয়। এই বৈশিষ্ট্যটি আপনার APK আকার হ্রাস করে, অ্যাপ ইনস্টলেশনের সাফল্যের হার বাড়ায় এবং একাধিক অ্যাপকে একই ফন্ট শেয়ার করার অনুমতি দেয়।
ফন্ট ডাউনলোড করার বিষয়ে আরও তথ্যের জন্য, ডাউনলোডযোগ্য ফন্টগুলি পড়ুন।
XML-এ ফন্ট
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) একটি নতুন বৈশিষ্ট্য প্রবর্তন করেছে, XML-এ ফন্ট, যা আপনাকে সম্পদ হিসাবে ফন্ট ব্যবহার করতে দেয়। এর মানে, সম্পদ হিসাবে ফন্ট বান্ডিল করার কোন প্রয়োজন নেই। ফন্টগুলি R
ফাইলে কম্পাইল করা হয় এবং একটি সংস্থান হিসাবে সিস্টেমে স্বয়ংক্রিয়ভাবে উপলব্ধ। তারপরে আপনি একটি নতুন রিসোর্স টাইপ, font
সাহায্যে এই ফন্টগুলি অ্যাক্সেস করতে পারেন।
সাপোর্ট লাইব্রেরি 26 এপিআই সংস্করণ 14 এবং উচ্চতর চলমান ডিভাইসগুলিতে এই বৈশিষ্ট্যটিকে সম্পূর্ণ সমর্থন প্রদান করে।
আরও তথ্যের জন্য, সম্পদ হিসাবে ফন্ট ব্যবহার করা এবং সিস্টেম ফন্ট পুনরুদ্ধার করার বিষয়ে, XML-এ ফন্টগুলি দেখুন।
স্বয়ংক্রিয় আকার টেক্সটভিউ
Android 8.0 (API স্তর 26) আপনাকে TextView এর আকারের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে আপনার পাঠ্যের আকার প্রসারিত বা চুক্তি সেট করতে দেয়। এর মানে হল, বিভিন্ন স্ক্রিনে বা ডায়নামিক কন্টেন্টের মাধ্যমে টেক্সট সাইজ অপ্টিমাইজ করা অনেক সহজ। আরও তথ্যের জন্য, অ্যান্ড্রয়েড 8.0-এ টেক্সটভিউ অটোসাইজ করার বিষয়ে, টেক্সটভিউ অটোসাইজ করা দেখুন।
অভিযোজিত আইকন
Android 8.0 (API লেভেল 26) অভিযোজিত লঞ্চার আইকন প্রবর্তন করে। অভিযোজিত আইকনগুলি ভিজ্যুয়াল এফেক্ট সমর্থন করে এবং বিভিন্ন ডিভাইস মডেল জুড়ে বিভিন্ন আকার প্রদর্শন করতে পারে। কীভাবে অভিযোজিত আইকন তৈরি করবেন তা শিখতে, অভিযোজিত আইকন নির্দেশিকা দেখুন।
রঙ ব্যবস্থাপনা
ইমেজিং অ্যাপ্লিকেশনগুলির অ্যান্ড্রয়েড বিকাশকারীরা এখন নতুন ডিভাইসগুলির সুবিধা নিতে পারে যেগুলির একটি প্রশস্ত-গামুট রঙের সক্ষম ডিসপ্লে রয়েছে৷ প্রশস্ত স্বরগ্রাম চিত্রগুলি প্রদর্শন করতে, অ্যাপগুলিকে তাদের ম্যানিফেস্টে (প্রতি কার্যকলাপে) একটি পতাকা সক্ষম করতে হবে এবং একটি এমবেডেড প্রশস্ত রঙের প্রোফাইল (AdobeRGB, Pro Photo RGB, DCI-P3, ইত্যাদি) সহ বিটম্যাপগুলি লোড করতে হবে৷
WebView API
আপনার অ্যাপে ওয়েব কন্টেন্ট প্রদর্শন করে এমন WebView
অবজেক্টগুলি পরিচালনা করতে আপনাকে সাহায্য করার জন্য Android 8.0 বেশ কয়েকটি API প্রদান করে। এই APIগুলি, যা আপনার অ্যাপের স্থিতিশীলতা এবং নিরাপত্তা উন্নত করে, নিম্নলিখিতগুলি অন্তর্ভুক্ত করে:
- সংস্করণ API
- Google SafeBrowsing API
- টার্মিনেশন হ্যান্ডেল API
- রেন্ডারার গুরুত্ব API
এই APIগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানতে, WebViews পরিচালনা দেখুন।
WebView
ক্লাসে এখন ওয়েব ব্রাউজিং এর নিরাপত্তা বাড়ানোর জন্য একটি নিরাপদ ব্রাউজিং API অন্তর্ভুক্ত রয়েছে। আরও তথ্যের জন্য, Google Safe Browsing API দেখুন।
শর্টকাট এবং উইজেট পিন করা
অ্যান্ড্রয়েড 8.0 (API লেভেল 26) শর্টকাট এবং উইজেটগুলির ইন-অ্যাপ পিনিং প্রবর্তন করে৷ আপনার অ্যাপে, আপনি ব্যবহারকারীর অনুমতি সাপেক্ষে সমর্থিত লঞ্চারের জন্য পিন করা শর্টকাট এবং উইজেট তৈরি করতে পারেন।
আরও তথ্যের জন্য, পিনিং শর্টকাট এবং উইজেট বৈশিষ্ট্য নির্দেশিকা দেখুন।
সর্বাধিক স্ক্রীন আকৃতির অনুপাত
Android 8.0 (API লেভেল 26) একটি অ্যাপের সর্বোচ্চ আকৃতির অনুপাত কীভাবে কনফিগার করতে হয় তাতে পরিবর্তন আনে।
প্রথমত, অ্যান্ড্রয়েড 8.0 maxAspectRatio বৈশিষ্ট্যটি প্রবর্তন করে, যা আপনি আপনার অ্যাপের সর্বাধিক আকৃতির অনুপাত সেট করতে ব্যবহার করতে পারেন। উপরন্তু, Android 8.0 এবং উচ্চতর সংস্করণে, একটি অ্যাপের ডিফল্ট সর্বোচ্চ আকৃতির অনুপাত হল অ্যাপটি যে ডিভাইসে চলছে তার নেটিভ অ্যাসপেক্ট রেশিও।
সর্বাধিক আকৃতির অনুপাত ঘোষণা সম্পর্কে আরও তথ্যের জন্য, একাধিক স্ক্রিন সমর্থন করা দেখুন।
মাল্টি-ডিসপ্লে সমর্থন
অ্যান্ড্রয়েড 8.0 (API লেভেল 26) দিয়ে শুরু করে, প্ল্যাটফর্মটি একাধিক ডিসপ্লের জন্য উন্নত সমর্থন অফার করে। যদি কোনো অ্যাক্টিভিটি মাল্টি-উইন্ডো মোড সমর্থন করে এবং একাধিক ডিসপ্লে সহ একটি ডিভাইসে চলমান থাকে, ব্যবহারকারীরা অ্যাক্টিভিটিটিকে এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে স্থানান্তর করতে পারেন। যখন কোনো অ্যাপ কোনো অ্যাক্টিভিটি চালু করে, অ্যাপটি নির্দিষ্ট করতে পারে কোন ডিসপ্লেতে অ্যাক্টিভিটি চালানো উচিত।
দ্রষ্টব্য: যদি কোনো কার্যকলাপ মাল্টি-উইন্ডো মোড সমর্থন করে, তাহলে Android 8.0 স্বয়ংক্রিয়ভাবে সেই কার্যকলাপের জন্য মাল্টি-ডিসপ্লে সমর্থন সক্ষম করে। এটি একটি মাল্টি-ডিসপ্লে পরিবেশে পর্যাপ্তভাবে কাজ করে তা নিশ্চিত করতে আপনার অ্যাপটি পরীক্ষা করা উচিত।
অ্যাপটিতে একাধিক ডিসপ্লে থাকলেও একবারে শুধুমাত্র একটি অ্যাক্টিভিটি পুনরায় শুরু করা অবস্থায় থাকতে পারে। ফোকাস সহ কার্যকলাপ পুনরায় শুরু অবস্থায় আছে; অন্যান্য সমস্ত দৃশ্যমান ক্রিয়াকলাপ বিরাম দেওয়া হয়েছে, কিন্তু বন্ধ করা হয়নি৷ বিভিন্ন কার্যকলাপ দৃশ্যমান হলে কার্যকলাপ জীবনচক্র সম্পর্কে আরও তথ্যের জন্য, মাল্টি-উইন্ডো লাইফসাইকেল দেখুন।
যখন একজন ব্যবহারকারী একটি ক্রিয়াকলাপকে এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে স্থানান্তরিত করে, তখন সিস্টেমটি কার্যকলাপের আকার পরিবর্তন করে এবং প্রয়োজন অনুসারে রানটাইম পরিবর্তনগুলি ইস্যু করে। আপনার কার্যকলাপ কনফিগারেশন পরিবর্তন নিজেই পরিচালনা করতে পারে, অথবা এটি সিস্টেমকে আপনার কার্যকলাপ সম্বলিত প্রক্রিয়াটি ধ্বংস করতে এবং নতুন মাত্রা সহ এটিকে পুনরায় তৈরি করার অনুমতি দিতে পারে। আরও তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি হ্যান্ডলিং দেখুন।
ActivityOptions
একাধিক প্রদর্শন সমর্থন করার জন্য দুটি নতুন পদ্ধতি প্রদান করে:
-
setLaunchDisplayId()
- কোন ডিসপ্লেতে অ্যাক্টিভিটি চালু হলে সেটি দেখানো হবে তা নির্দিষ্ট করে।
-
getLaunchDisplayId()
- কার্যকলাপের বর্তমান লঞ্চ প্রদর্শন ফেরত দেয়।
একাধিক প্রদর্শন সমর্থন করার জন্য adb শেল প্রসারিত করা হয়। shell start
কমান্ডটি এখন একটি কার্যকলাপ চালু করতে এবং কার্যকলাপের লক্ষ্য প্রদর্শন নির্দিষ্ট করতে ব্যবহার করা যেতে পারে:
adb shell start <activity_name> --display <display_id>
ইউনিফাইড লেআউট মার্জিন এবং প্যাডিং
অ্যান্ড্রয়েড 8.0 (API লেভেল 26) আপনার পক্ষে এমন পরিস্থিতি নির্দিষ্ট করা সহজ করে যেখানে একটি View
উপাদানের বিপরীত দিক একই মার্জিন বা প্যাডিং ব্যবহার করে। বিশেষভাবে, আপনি এখন আপনার লেআউট XML ফাইলগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:
-
layout_marginVertical
, যা একই সময়েlayout_marginTop
এবংlayout_marginBottom
সংজ্ঞায়িত করে। -
layout_marginHorizontal
, যা একই সময়েlayout_marginLeft
এবংlayout_marginRight
সংজ্ঞায়িত করে। -
paddingVertical
, যা একই সময়েpaddingTop
এবংpaddingBottom
সংজ্ঞায়িত করে। -
paddingHorizontal
, যা একই সময়েpaddingLeft
এবংpaddingRight
সংজ্ঞায়িত করে।
দ্রষ্টব্য: আপনি যদি পাঠ্যের দিকনির্দেশ সহ বিভিন্ন ভাষা এবং সংস্কৃতিকে সমর্থন করার জন্য আপনার অ্যাপের যুক্তি কাস্টমাইজ করেন তবে মনে রাখবেন যে এই বৈশিষ্ট্যগুলি layout_marginStart
, layout_marginEnd
, paddingStart
, বা paddingEnd
এর মানগুলিকে প্রভাবিত করে না৷ টেক্সট দিকনির্দেশের উপর নির্ভর করে এমন লেআউট আচরণ তৈরি করতে আপনি নতুন উল্লম্ব এবং অনুভূমিক লেআউট বৈশিষ্ট্যগুলি ছাড়াও এই মানগুলি নিজেই সেট করতে পারেন।
পয়েন্টার ক্যাপচার
কিছু অ্যাপ, যেমন গেমস, রিমোট ডেস্কটপ এবং ভার্চুয়ালাইজেশন ক্লায়েন্ট, মাউস পয়েন্টারের উপর নিয়ন্ত্রণ পেয়ে অনেক উপকৃত হয়। পয়েন্টার ক্যাপচার হল Android 8.0 (API লেভেল 26) এর একটি নতুন বৈশিষ্ট্য যা আপনার অ্যাপে একটি ফোকাসড ভিউতে সমস্ত মাউস ইভেন্ট ডেলিভার করার মাধ্যমে এই ধরনের নিয়ন্ত্রণ প্রদান করে।
Android 8.0 থেকে শুরু করে, আপনার অ্যাপের একটি View
পয়েন্টার ক্যাপচারের অনুরোধ করতে পারে এবং ক্যাপচার করা পয়েন্টার ইভেন্টগুলি প্রক্রিয়া করার জন্য একজন শ্রোতাকে সংজ্ঞায়িত করতে পারে। এই মোডে থাকাকালীন মাউস পয়েন্টার লুকানো থাকে। ভিউ পয়েন্টার ক্যাপচার ছেড়ে দিতে পারে যখন এটির আর মাউস তথ্যের প্রয়োজন হয় না। সিস্টেমটি পয়েন্টার ক্যাপচারও প্রকাশ করতে পারে যখন ভিউ ফোকাস হারায়, উদাহরণস্বরূপ, যখন ব্যবহারকারী অন্য অ্যাপ খোলে।
আপনার অ্যাপে এই বৈশিষ্ট্যটি কীভাবে ব্যবহার করবেন সে সম্পর্কে তথ্যের জন্য, পয়েন্টার ক্যাপচার দেখুন।
অ্যাপের বিভাগগুলি
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) প্রাসঙ্গিক হলে প্রতিটি অ্যাপকে একটি বিভাগ ঘোষণা করার অনুমতি দেয় যা এটির সাথে মানানসই। ডেটা ব্যবহার, ব্যাটারি ব্যবহার বা স্টোরেজ ব্যবহারের মতো ব্যবহারকারীদের কাছে উপস্থাপন করার সময় এই বিভাগগুলিকে একই উদ্দেশ্য বা ফাংশনের অ্যাপগুলিকে একত্রিত করতে ব্যবহার করা হয়। আপনি আপনার <application>
ম্যানিফেস্ট ট্যাগে android:appCategory
অ্যাট্রিবিউট সেট করে আপনার অ্যাপের জন্য একটি বিভাগ নির্ধারণ করতে পারেন।
অ্যান্ড্রয়েড টিভি লঞ্চার
Android 8.0 (API লেভেল 26) একটি নতুন বিষয়বস্তু-কেন্দ্রিক, Android TV হোম স্ক্রীন অভিজ্ঞতা অন্তর্ভুক্ত করে, যা Android 8.0-এর জন্য Android TV এমুলেটর এবং Nexus Player ডিভাইস ইমেজের সাথে উপলব্ধ। নতুন হোম স্ক্রীন চ্যানেলগুলির সাথে সারিবদ্ধভাবে ভিডিও সামগ্রীগুলিকে সংগঠিত করে, যেগুলি প্রতিটি সিস্টেমে একটি অ্যাপের মাধ্যমে প্রোগ্রাম দ্বারা পরিপূর্ণ। অ্যাপগুলি একাধিক চ্যানেল প্রকাশ করতে পারে এবং ব্যবহারকারীরা হোম স্ক্রিনে কোন চ্যানেলগুলি দেখতে চান তা কনফিগার করতে পারে৷ অ্যান্ড্রয়েড টিভি হোম স্ক্রীনে একটি পরের সারি দেখুন, যা ব্যবহারকারীর দেখার অভ্যাসের উপর ভিত্তি করে অ্যাপের প্রোগ্রামগুলি দ্বারা পরিপূর্ণ। অ্যাপগুলি ভিডিও প্রিভিউও প্রদান করতে পারে, যেটি স্বয়ংক্রিয়ভাবে চালানো হয় যখন একজন ব্যবহারকারী একটি প্রোগ্রামে ফোকাস করে। চ্যানেল এবং প্রোগ্রামগুলিকে পপুলেট করার জন্য APIগুলি হল TvProvider APIগুলির অংশ, যেগুলি Android 8.0 এর সাথে একটি Android সমর্থন লাইব্রেরি মডিউল হিসাবে বিতরণ করা হয়৷
অ্যানিমেটরসেট
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) থেকে শুরু করে, AnimatorSet
এপিআই এখন রিভার্সে চাওয়া এবং খেলা সমর্থন করে। সিকিং আপনাকে অ্যানিমেশনের অবস্থান নির্দিষ্ট সময়ে নির্দিষ্ট সময়ে সেট করতে দেয়। আপনার অ্যাপে যদি পূর্বাবস্থায় ফেরানো যেতে পারে এমন ক্রিয়াগুলির জন্য অ্যানিমেশন অন্তর্ভুক্ত থাকে তবে বিপরীতে বাজানো কার্যকর। দুটি পৃথক অ্যানিমেশন সেট সংজ্ঞায়িত করার পরিবর্তে, আপনি বিপরীতে একই খেলতে পারেন।
ইনপুট এবং নেভিগেশন
কীবোর্ড নেভিগেশন ক্লাস্টার
যদি আপনার অ্যাপে কোনো অ্যাক্টিভিটি একটি জটিল ভিউ হায়ারার্কি ব্যবহার করে, যেমন চিত্র 2-এর একটি, তাহলে তাদের মধ্যে সহজ কীবোর্ড নেভিগেশনের জন্য UI উপাদানগুলির গ্রুপগুলিকে ক্লাস্টারে সংগঠিত করার কথা বিবেচনা করুন। ব্যবহারকারীরা এক ক্লাস্টার থেকে অন্য ক্লাস্টারে নেভিগেট করতে Chromebook ডিভাইসে Meta+Tab বা Search+Tab টিপতে পারেন। ক্লাস্টারগুলির ভাল উদাহরণগুলির মধ্যে রয়েছে: সাইড প্যানেল, নেভিগেশন বার, প্রধান বিষয়বস্তু এলাকা এবং উপাদান যাতে অনেক শিশু উপাদান থাকতে পারে।
একটি View
বা ViewGroup
এলিমেন্টকে ক্লাস্টার করতে, এলিমেন্টের লেআউট XML ফাইলে android:keyboardNavigationCluster
অ্যাট্রিবিউটটিকে true
এ সেট করুন, অথবা আপনার অ্যাপের UI লজিক-এ setKeyboardNavigationCluster()
এ true
পাস করুন।
দ্রষ্টব্য: ক্লাস্টারগুলিকে নেস্ট করা যায় না, যদিও নন-নেস্টেড ক্লাস্টারগুলি শ্রেণিবিন্যাসের বিভিন্ন স্তরে উপস্থিত হতে পারে৷ আপনি যদি ক্লাস্টার নেস্ট করার চেষ্টা করেন, ফ্রেমওয়ার্ক শুধুমাত্র শীর্ষ-সবচেয়ে ViewGroup
উপাদানকে ক্লাস্টার হিসাবে বিবেচনা করে।
টাচস্ক্রিন আছে এমন ডিভাইসগুলিতে, আপনি ক্লাস্টার-নির্ধারিত ViewGroup
অবজেক্টের android:touchscreenBlocksFocus
উপাদানটিকে true
হিসাবে সেট করতে পারেন যাতে ক্লাস্টার-কেবলমাত্র সেই ক্লাস্টারে এবং বাইরে নেভিগেশন করার অনুমতি দেওয়া হয়। যদি আপনি এই কনফিগারেশনটি একটি ক্লাস্টারে প্রয়োগ করেন, ব্যবহারকারীরা ক্লাস্টারে বা বাইরে নেভিগেট করতে ট্যাব কী বা তীর কী ব্যবহার করতে পারবেন না; তাদের পরিবর্তে ক্লাস্টার নেভিগেশন কীবোর্ড সমন্বয় টিপুন।
ডিফল্ট ফোকাস দেখুন
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26), আপনি একটি (পুনরায়) তৈরি করা কার্যকলাপ পুনরায় শুরু করার পরে এবং ব্যবহারকারী একটি কীবোর্ড নেভিগেশন কী টিপে, যেমন ট্যাব কী টিপে ফোকাস গ্রহণ করা উচিত এমন View
বরাদ্দ করতে পারেন। এই "ফোকাসড বাই ডিফল্ট" সেটিংটি প্রয়োগ করতে, UI উপাদান ধারণকারী লেআউট XML ফাইলে একটি View
এলিমেন্টের android:focusedByDefault
অ্যাট্রিবিউটকে true
সেট করুন অথবা আপনার অ্যাপের UI লজিকে setFocusedByDefault()
এ true
পাস করুন।
বক্তৃতা আউটপুট
ক্রিয়াকলাপ এবং পরিষেবাগুলি বিষয়বস্তু লিখতে এবং উচ্চারণ করতে TextToSpeech
এর উদাহরণ ব্যবহার করতে পারে। Android 8.0 (API লেভেল 26) অনুযায়ী, আপনার অ্যাপ কখন একটি টেক্সট-টু-স্পীচ ইঞ্জিন পৃথক সংশ্লেষিত শব্দ বলতে শুরু করে সে সম্পর্কে আরও সুনির্দিষ্ট সময়ের তথ্য পেতে পারে, যতক্ষণ না ইঞ্জিন এই তথ্য প্রদান করে। টেক্সট-টু-স্পীচ ইঞ্জিন তাদের কথা বলে বলে আপনি নির্দিষ্ট শব্দের প্রতি মনোযোগ আকর্ষণ করতে এই কার্যকারিতা ব্যবহার করতে পারেন।
আপনার অ্যাপে এই টেক্সট-টু-স্পিচ ইঞ্জিনের উন্নতিগুলি ব্যবহার করতে, UtteranceProgressListener
এর একটি উদাহরণ নিবন্ধন করুন। নিবন্ধন প্রক্রিয়ার অংশ হিসাবে, onRangeStart()
পদ্ধতির জন্য একটি হ্যান্ডলার অন্তর্ভুক্ত করুন।
টেক্সট-টু-স্পিচ ইঞ্জিন rangeStart()
কে কল করে সেই সময়ে রেকর্ড করার জন্য যেখানে এটি একটি নির্দিষ্ট পরিসরের পাঠ্যের অডিও প্লেব্যাক শুরু হওয়ার আশা করে। যখন সেই পাঠ্য পরিসরের জন্য অডিও প্লেব্যাক শুরু হয়, তখন আপনার অ্যাপের onRangeStart()
পদ্ধতি কার্যকর হয়। আপনার অ্যাপটি তখন এই কলব্যাকে সাড়া দিতে পারে, যেমন উচ্চারণের সাথে যুক্ত পাঠ্য পরিসর হাইলাইট করে।
একটি টেক্সট-টু-স্পীচ ইঞ্জিনের প্লেব্যাক অগ্রগতি ট্র্যাক করার বিষয়ে আরও তথ্যের জন্য, UtteranceProgressListener
ক্লাস রেফারেন্স দেখুন।
সিস্টেম
নতুন স্ট্রিক্টমোড ডিটেক্টর
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) আপনার অ্যাপে সম্ভাব্য বাগ শনাক্ত করতে সাহায্য করার জন্য তিনটি নতুন স্ট্রিক্টমোড ডিটেক্টর যোগ করে:
-
detectUnbufferedIo()
শনাক্ত করবে যখন আপনার অ্যাপ বাফারিং ছাড়াই ডেটা পড়ে বা লেখে, যা কার্যক্ষমতাকে ব্যাপকভাবে প্রভাবিত করতে পারে। -
detectContentUriWithoutPermission()
সনাক্ত করবে যখন আপনার অ্যাপ ভুলবশত আপনার অ্যাপের বাইরে কোনো অ্যাক্টিভিটি শুরু করার সময় অন্য অ্যাপকে অনুমতি দিতে ভুলে যায়। -
detectUntaggedSockets()
শনাক্ত করবে যখন আপনার অ্যাপsetThreadStatsTag(int)
ব্যবহার না করেই নেটওয়ার্ক ট্র্যাফিক সম্পাদন করে আপনার ট্র্যাফিককে ডিবাগ করার উদ্দেশ্যে ট্যাগ করতে।
ক্যাশে ডেটা
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) ক্যাশে করা ডেটার আশেপাশে আরও ভাল দিকনির্দেশনা এবং আচরণ দেয়। প্রতিটি অ্যাপকে এখন ক্যাশে করা ডেটার জন্য একটি ডিস্ক স্পেস কোটা দেওয়া হয়, যেমন getCacheQuotaBytes(UUID)
দ্বারা ফেরত দেওয়া হয়।
যখন সিস্টেমটিকে ডিস্কের স্থান খালি করার প্রয়োজন হয়, তখন এটি তাদের বরাদ্দকৃত কোটা থেকে সবচেয়ে বেশি অ্যাপ্লিকেশানগুলি থেকে ক্যাশে করা ফাইলগুলি মুছে ফেলার মাধ্যমে শুরু হবে৷ এইভাবে, আপনি যদি আপনার ক্যাশে করা ডেটা আপনার বরাদ্দকৃত কোটার অধীনে রাখেন, আপনার ক্যাশে করা ফাইলগুলি সিস্টেমের শেষ কিছু হবে যখন প্রয়োজনে সাফ করা হবে। যখন সিস্টেম আপনার অ্যাপের মধ্যে কোন ক্যাশে ফাইলগুলি মুছে ফেলতে হবে তা নির্ধারণ করছে, এটি প্রথমে সবচেয়ে পুরানো ফাইলগুলি বিবেচনা করবে (পরিবর্তিত সময়ের দ্বারা নির্ধারিত)।
সিস্টেমটি কীভাবে আপনার ক্যাশে করা ডেটা মুক্ত করে তা নিয়ন্ত্রণ করতে আপনি প্রতি-ডিরেক্টরি ভিত্তিতে সক্ষম করতে পারেন এমন দুটি নতুন আচরণও রয়েছে:
-
StorageManager.setCacheBehaviorAtomic()
নির্দেশ করতে ব্যবহার করা যেতে পারে যে একটি ডিরেক্টরি এবং এর সমস্ত বিষয়বস্তু একটি একক পারমাণবিক ইউনিট হিসাবে মুছে ফেলা উচিত। -
setCacheBehaviorTombstone(File, boolean)
নির্দেশ করার জন্য ব্যবহার করা যেতে পারে যে একটি ডিরেক্টরির মধ্যে ফাইলগুলি মুছে ফেলার পরিবর্তে, সেগুলিকে দৈর্ঘ্যে 0 বাইট করা উচিত, খালি ফাইলটি অক্ষত রেখে।
অবশেষে, যখন আপনাকে বড় ফাইলগুলির জন্য ডিস্কের স্থান বরাদ্দ করতে হবে, তখন নতুন allocateBytes(FileDescriptor, long)
API ব্যবহার করার কথা বিবেচনা করুন, যা স্বয়ংক্রিয়ভাবে আপনার অনুরোধ পূরণ করার জন্য অন্যান্য অ্যাপের (প্রয়োজন অনুসারে) ক্যাশে করা ফাইলগুলিকে সাফ করবে৷ ডিভাইসটিতে আপনার নতুন ডেটা রাখার জন্য পর্যাপ্ত ডিস্ক স্পেস আছে কিনা তা সিদ্ধান্ত নেওয়ার সময়, getUsableSpace()
ব্যবহার করার পরিবর্তে getAllocatableBytes(UUID)
এ কল করুন, যেহেতু সিস্টেমটি আপনার পক্ষে সাফ করতে ইচ্ছুক যে কোনও ক্যাশে করা ডেটা বিবেচনা করবে।
বিষয়বস্তু প্রদানকারী পেজিং
আমরা কন্টেন্ট প্রদানকারীদের আপডেট করেছি একটি বড় ডেটাসেট লোড করার জন্য সমর্থন অন্তর্ভুক্ত করার জন্য এক সময়ে একটি পৃষ্ঠা। উদাহরণস্বরূপ, হাজার হাজার ছবি সহ একটি ফটো অ্যাপ একটি পৃষ্ঠায় উপস্থাপিত ডেটার উপসেটের জন্য অনুসন্ধান করতে পারে। একটি বিষয়বস্তু প্রদানকারী দ্বারা প্রত্যাবর্তিত ফলাফলের প্রতিটি পৃষ্ঠা একটি একক কার্সার বস্তু দ্বারা প্রতিনিধিত্ব করা হয়। এই বৈশিষ্ট্যটি ব্যবহার করার জন্য একটি ক্লায়েন্ট এবং একটি প্রদানকারী উভয়কেই পেজিং প্রয়োগ করতে হবে।
বিষয়বস্তু প্রদানকারীদের পরিবর্তন সম্পর্কে বিস্তারিত তথ্যের জন্য, ContentProvider
এবং ContentProviderClient
দেখুন।
বিষয়বস্তু রিফ্রেশ অনুরোধ
ContentProvider
এবং ContentResolver
ক্লাসে এখন প্রত্যেকটিতে একটি refresh()
পদ্ধতি অন্তর্ভুক্ত রয়েছে, যা ক্লায়েন্টদের জন্য তাদের অনুরোধ করা তথ্য আপ-টু-ডেট কিনা তা জানা সহজ করে তোলে।
আপনি ContentProvider
প্রসারিত করে কাস্টম কন্টেন্ট রিফ্রেশিং লজিক যোগ করতে পারেন। নিশ্চিত করুন যে আপনি refresh()
পদ্ধতিটি ওভাররাইড করে true
ফিরে আসতে পারেন, যা আপনার প্রদানকারীর ক্লায়েন্টদের নির্দেশ করে যে আপনি নিজেই ডেটা রিফ্রেশ করার চেষ্টা করেছেন।
আপনার ক্লায়েন্ট অ্যাপ স্পষ্টভাবে refresh()
নামে একটি ভিন্ন পদ্ধতিতে কল করে রিফ্রেশ করা সামগ্রীর অনুরোধ করতে পারে। এই পদ্ধতিতে কল করার সময়, রিফ্রেশ করতে ডেটার URI পাস করুন।
দ্রষ্টব্য: যেহেতু আপনি একটি নেটওয়ার্কে ডেটার জন্য অনুরোধ করছেন, তাই আপনার ক্লায়েন্টের পক্ষ থেকে refresh()
আহ্বান করা উচিত যখন একটি শক্তিশালী ইঙ্গিত পাওয়া যায় যে বিষয়বস্তুটি পুরানো। এই ধরনের সামগ্রী রিফ্রেশ করার সবচেয়ে সাধারণ কারণ হল একটি সোয়াইপ-টু-রিফ্রেশ অঙ্গভঙ্গির প্রতিক্রিয়া, স্পষ্টভাবে বর্তমান UI-কে আপ-টু-ডেট সামগ্রী প্রদর্শনের জন্য অনুরোধ করা।
কাজের সময়সূচির উন্নতি
Android 8.0 (API লেভেল 26) JobScheduler
এ বেশ কিছু উন্নতির পরিচয় দেয়। এই উন্নতিগুলি আপনার অ্যাপের জন্য নতুন ব্যাকগ্রাউন্ড এক্সিকিউশন সীমা মেনে চলা সহজ করে তোলে, যেহেতু আপনি এখন-সীমাবদ্ধ ব্যাকগ্রাউন্ড পরিষেবা বা অন্তর্নিহিত সম্প্রচার রিসিভারগুলি প্রতিস্থাপন করতে সাধারণত নির্ধারিত কাজগুলি ব্যবহার করতে পারেন৷
JobScheduler
এর আপডেট অন্তর্ভুক্ত:
- আপনি এখন একটি নির্ধারিত কাজের সাথে একটি কাজের সারি সংযুক্ত করতে পারেন৷ কাজের সারিতে একটি কাজের আইটেম যোগ করতে,
JobScheduler.enqueue()
এ কল করুন। যখন কাজ চলছে, তখন এটি মুলতুবি থাকা কাজকে সারির বাইরে নিয়ে যেতে পারে এবং এটি প্রক্রিয়া করতে পারে। এই কার্যকারিতা অনেকগুলি ব্যবহারের ক্ষেত্রে পরিচালনা করে যেগুলি আগে একটি ব্যাকগ্রাউন্ড পরিষেবা শুরু করার জন্য বলা হত, বিশেষত পরিষেবাগুলি যেগুলিIntentService
প্রয়োগ করে। - অ্যান্ড্রয়েড সাপোর্ট লাইব্রেরি 26.0.0 একটি নতুন
JobIntentService
ক্লাস প্রবর্তন করে, যাIntentService
এর মতো একই কার্যকারিতা প্রদান করে কিন্তু Android 8.0 (API লেভেল 26) বা তার উপরে চলাকালীন পরিষেবার পরিবর্তে কাজ ব্যবহার করে। - আপনি এখন একটি কাজের সাথে একটি
ClipData
সংযুক্ত করতেJobInfo.Builder.setClipData()
কল করতে পারেন৷ এই বিকল্পটি আপনাকে একটি কাজের সাথে URI অনুমতি অনুদান যুক্ত করতে সক্ষম করে, একইভাবে কিভাবে এই অনুমতিগুলিContext.startService()
এ প্রচার করা যেতে পারে। আপনি কাজের সারিতে অভিপ্রায় সহ URI অনুমতি অনুদান ব্যবহার করতে পারেন। - নির্ধারিত কাজগুলি এখন বেশ কয়েকটি নতুন সীমাবদ্ধতা সমর্থন করে:
-
JobInfo.isRequireStorageNotLow()
- ডিভাইসের উপলব্ধ সঞ্চয়স্থান কম হলে কাজ চালানো হয় না।
-
JobInfo.isRequireBatteryNotLow()
- ব্যাটারি লেভেল ক্রিটিক্যাল থ্রেশহোল্ডে বা তার নিচে থাকলে কাজ চলে না; এটি সেই স্তর যেখানে ডিভাইসটি কম ব্যাটারি সতর্কতা সিস্টেম ডায়ালগ দেখায়।
-
NETWORK_TYPE_METERED
- বেশিরভাগ সেলুলার ডেটা প্ল্যানের মতো চাকরির জন্য একটি মিটারযুক্ত নেটওয়ার্ক সংযোগ প্রয়োজন।
-
কাস্টম ডেটা স্টোর
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) আপনাকে আপনার পছন্দগুলির জন্য একটি কাস্টম ডেটা স্টোর প্রদান করতে দেয়, যা আপনার অ্যাপ পছন্দগুলিকে একটি ক্লাউড বা স্থানীয় ডাটাবেসে সঞ্চয় করলে বা পছন্দগুলি ডিভাইস-নির্দিষ্ট হলে উপযোগী হতে পারে। ডেটা স্টোর বাস্তবায়ন সম্পর্কে আরও তথ্যের জন্য, কাস্টম ডেটা স্টোর পড়ুন।
মিডিয়া বর্ধিতকরণ
ভলিউমশেপার
একটি নতুন VolumeShaper
ক্লাস আছে। ফেইড-ইনস, ফেইড-আউটস এবং ক্রস ফেডের মতো ছোট স্বয়ংক্রিয় ভলিউম ট্রানজিশন করতে এটি ব্যবহার করুন। আরও জানতে ভলিউমশেপার সহ কন্ট্রোলিং প্রশস্ততা দেখুন।
অডিও ফোকাস বৃদ্ধি
অডিও অ্যাপ্লিকেশানগুলি অডিও ফোকাসের অনুরোধ এবং পরিত্যাগ করে একটি ডিভাইসে অডিও আউটপুট ভাগ করে। একটি অ্যাপ প্লেব্যাক শুরু বা বন্ধ করে বা এর ভলিউম কমিয়ে ফোকাসে পরিবর্তনগুলি পরিচালনা করে। একটি নতুন AudioFocusRequest
ক্লাস আছে। requestAudioFocus()
এর প্যারামিটার হিসাবে এই ক্লাসটি ব্যবহার করে, অডিও ফোকাসের পরিবর্তনগুলি পরিচালনা করার সময় অ্যাপগুলির নতুন ক্ষমতা রয়েছে: স্বয়ংক্রিয় ডাকিং এবং বিলম্বিত ফোকাস লাভ ।
মিডিয়া মেট্রিক্স
একটি নতুন getMetrics()
পদ্ধতি একটি PersistableBundle
অবজেক্ট প্রদান করে যাতে কনফিগারেশন এবং পারফরম্যান্সের তথ্য থাকে, যা বৈশিষ্ট্য এবং মানগুলির মানচিত্র হিসাবে প্রকাশ করা হয়। getMetrics()
পদ্ধতি এই মিডিয়া ক্লাসের জন্য সংজ্ঞায়িত করা হয়েছে:
-
MediaPlayer.getMetrics()
-
MediaRecorder.getMetrics()
-
MediaCodec.getMetrics()
-
MediaExtractor.getMetrics()
প্রতিটি উদাহরণের জন্য মেট্রিক্স আলাদাভাবে সংগ্রহ করা হয় এবং দৃষ্টান্তের জীবনকাল ধরে থাকে। যদি কোন মেট্রিক্স উপলব্ধ না হয় তবে পদ্ধতিটি শূন্য প্রদান করে। প্রত্যাবর্তিত প্রকৃত মেট্রিক্স ক্লাসের উপর নির্ভর করে।
মিডিয়া প্লেয়ার
অ্যান্ড্রয়েড 8.0 (API স্তর 26) থেকে শুরু করে মিডিয়াপ্লেয়ার DRM-সুরক্ষিত উপাদান এবং HLS নমুনা-স্তরের এনক্রিপ্ট করা মিডিয়া প্লেব্যাক করতে পারে।
Android 8.0 একটি নতুন ওভারলোডেড seekTo()
কমান্ড প্রবর্তন করে যা একটি ফ্রেমে খোঁজার সময় সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। এটিতে একটি দ্বিতীয় প্যারামিটার রয়েছে যা একটি সন্ধান মোড নির্দিষ্ট করে:
-
SEEK_PREVIOUS_SYNC
মিডিয়া অবস্থানকে একটি সিঙ্ক (বা কী) ফ্রেমে নিয়ে যায় যা একটি ডেটা উৎসের সাথে যুক্ত যা নির্দিষ্ট সময়ের ঠিক আগে বা সময়ে অবস্থিত। -
SEEK_NEXT_SYNC
মিডিয়া অবস্থানকে একটি ডেটা উৎসের সাথে যুক্ত একটি সিঙ্ক (বা কী) ফ্রেমে স্থানান্তরিত করে যা নির্দিষ্ট সময়ের ঠিক পরে বা সময়ে অবস্থিত। -
SEEK_CLOSEST_SYNC
মিডিয়া অবস্থানকে একটি সিঙ্ক (বা কী) ফ্রেমে নিয়ে যায় যা একটি ডেটা উৎসের সাথে যুক্ত যা প্রদত্ত সময়ে বা এর কাছাকাছি অবস্থিত। -
SEEK_CLOSEST
মিডিয়া অবস্থানটিকে একটি ফ্রেমে ( অগত্যা একটি সিঙ্ক বা কী ফ্রেম নয় ) একটি ডেটা উত্সের সাথে যুক্ত করে যা প্রদত্ত সময়ে বা এর কাছাকাছি অবস্থিত৷
ক্রমাগত অনুসন্ধান করার সময়, অ্যাপগুলিকে SEEK_CLOSEST
এর পরিবর্তে যেকোনও SEEK_
মোড ব্যবহার করা উচিত, যা তুলনামূলকভাবে ধীর গতিতে চলে কিন্তু আরও সুনির্দিষ্ট হতে পারে৷
মিডিয়া রেকর্ডার
- MediaRecorder এখন MPEG2_TS ফর্ম্যাট সমর্থন করে যা স্ট্রিমিংয়ের জন্য দরকারী:
কোটলিন
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
জাভা
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
-
MediaMuxer
এখন যেকোনো সংখ্যক অডিও এবং ভিডিও স্ট্রিম পরিচালনা করতে পারে। আপনি আর একটি অডিও ট্র্যাক এবং/অথবা একটি ভিডিও ট্র্যাকের মধ্যে সীমাবদ্ধ নন৷ আপনার পছন্দ মত অনেক ট্র্যাক মিশ্রিত করতেaddTrack()
ব্যবহার করুন। -
MediaMuxer
এক বা একাধিক মেটাডেটা ট্র্যাক যোগ করতে পারে যাতে ব্যবহারকারী-সংজ্ঞায়িত প্রতি-ফ্রেম তথ্য থাকে। মেটাডেটার বিন্যাস আপনার অ্যাপ্লিকেশন দ্বারা সংজ্ঞায়িত করা হয়। মেটাডেটা ট্র্যাক শুধুমাত্র MP4 পাত্রে সমর্থিত।
মেটাডেটা অফলাইন প্রক্রিয়াকরণের জন্য উপযোগী হতে পারে। উদাহরণস্বরূপ, সেন্সর থেকে gyro সংকেত ভিডিও স্থিতিশীলতা সঞ্চালন করতে ব্যবহার করা যেতে পারে.
একটি মেটাডেটা ট্র্যাক যোগ করার সময়, ট্র্যাকের মাইম ফর্ম্যাটটি অবশ্যই "অ্যাপ্লিকেশন/" উপসর্গ দিয়ে শুরু হবে। মেটাডেটা লেখা ভিডিও/অডিও ডেটা লেখার মতই, তবে ডেটা MediaCodec
থেকে আসে না। পরিবর্তে, অ্যাপটি writeSampleData()
পদ্ধতিতে সংশ্লিষ্ট টাইমস্ট্যাম্প সহ একটি ByteBuffer
পাস করে। টাইমস্ট্যাম্প অবশ্যই ভিডিও এবং অডিও ট্র্যাকের মতো একই টাইম বেস হতে হবে।
জেনারেট করা MP4 ফাইলটি ISOBMFF এর 12.3.3.2 ধারায় সংজ্ঞায়িত TextMetaDataSampleEntry
ব্যবহার করে মেটাডেটার মাইম বিন্যাসকে সংকেত দিতে। মেটাডেটা ট্র্যাক সহ ফাইল এক্সট্র্যাক্ট করতে MediaExtractor
ব্যবহার করার সময়, মেটাডেটার মাইম ফরম্যাট MediaFormat
এ বের করা হবে।
উন্নত মিডিয়া ফাইল অ্যাক্সেস
স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) অ্যাপগুলিকে একটি কাস্টম DocumentsProvider
উন্মুক্ত করার অনুমতি দেয়, যা অন্যান্য অ্যাপে ডেটা উৎসের ফাইলগুলিতে অ্যাক্সেস প্রদান করতে পারে। প্রকৃতপক্ষে, একটি নথি প্রদানকারী এমনকি নেটওয়ার্ক স্টোরেজে থাকা ফাইলগুলিতে অ্যাক্সেস প্রদান করতে পারে বা যা মিডিয়া ট্রান্সফার প্রোটোকল (MTP) এর মতো একটি প্রোটোকল ব্যবহার করে৷
যাইহোক, দূরবর্তী ডেটা উত্স থেকে বড় মিডিয়া ফাইলগুলি অ্যাক্সেস করা কিছু চ্যালেঞ্জ প্রবর্তন করে:
- মিডিয়া প্লেয়ারদের একটি নথি প্রদানকারীর কাছ থেকে একটি ফাইলে অ্যাক্সেসযোগ্য অ্যাক্সেস প্রয়োজন। এমন ক্ষেত্রে যেখানে একটি বড় মিডিয়া ফাইল দূরবর্তী ডেটা উত্সে থাকে, নথি প্রদানকারীকে অবশ্যই সমস্ত ডেটা আগে থেকে আনতে হবে এবং একটি স্ন্যাপশট ফাইল বর্ণনাকারী তৈরি করতে হবে। মিডিয়া প্লেয়ার ফাইল বর্ণনাকারী ছাড়া ফাইলটি চালাতে পারে না, এইভাবে ডকুমেন্ট প্রদানকারী ফাইলটি ডাউনলোড করা শেষ না হওয়া পর্যন্ত প্লেব্যাক শুরু হতে পারে না।
- মিডিয়া সংগ্রহ পরিচালকদের, যেমন ফটো অ্যাপ, স্কোপড ফোল্ডারের মাধ্যমে একটি বহিরাগত SD কার্ডে সংরক্ষিত মিডিয়াতে পৌঁছানোর জন্য অ্যাক্সেস ইউআরআইগুলির একটি সিরিজ অতিক্রম করতে হবে৷ এই অ্যাক্সেস প্যাটার্নটি মিডিয়াতে ব্যাপক ক্রিয়াকলাপ করে - যেমন সরানো, অনুলিপি করা এবং মুছে ফেলা - বেশ ধীর।
- মিডিয়া সংগ্রহ পরিচালকরা একটি নথির অবস্থান নির্ধারণ করতে পারে না তার URI দেওয়া৷ এটি এই ধরনের অ্যাপগুলির জন্য ব্যবহারকারীদের একটি মিডিয়া ফাইল কোথায় সংরক্ষণ করতে হবে তা চয়ন করার অনুমতি দেওয়া কঠিন করে তোলে৷
অ্যান্ড্রয়েড 8.0 স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক উন্নত করার মাধ্যমে এই চ্যালেঞ্জগুলির প্রতিটি মোকাবেলা করে৷
কাস্টম নথি প্রদানকারী
অ্যান্ড্রয়েড 8.0 থেকে শুরু করে, স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক কাস্টম ডকুমেন্ট প্রদানকারীদের একটি দূরবর্তী ডেটা উৎসে থাকা ফাইলগুলির জন্য অনুসন্ধানযোগ্য ফাইল বর্ণনাকারী তৈরি করতে দেয়৷ একটি নেটিভ অনুসন্ধানযোগ্য ফাইল বর্ণনাকারী পেতে SAF একটি ফাইল খুলতে পারে। SAF তারপর নথি প্রদানকারীর কাছে বিচ্ছিন্ন বাইট অনুরোধ সরবরাহ করে। এই বৈশিষ্ট্যটি একটি নথি প্রদানকারীকে সম্পূর্ণ ফাইলটি আগাম ক্যাশ করার পরিবর্তে একটি মিডিয়া প্লেয়ার অ্যাপের অনুরোধ করা বাইটের সঠিক পরিসীমা ফেরত দিতে দেয়।
এই বৈশিষ্ট্যটি ব্যবহার করতে, আপনাকে নতুন StorageManager.openProxyFileDescriptor()
পদ্ধতিতে কল করতে হবে৷ openProxyFileDescriptor()
পদ্ধতি কলব্যাক হিসাবে একটি ProxyFileDescriptorCallback
অবজেক্ট গ্রহণ করে। ডকুমেন্ট প্রদানকারীর কাছ থেকে প্রত্যাবর্তনকৃত ফাইল বর্ণনাকারীতে ক্লায়েন্ট অ্যাপ্লিকেশন ফাইল অপারেশন সম্পাদন করার সময় SAF কলব্যাকের আহ্বান জানায়।
সরাসরি নথি অ্যাক্সেস
Android 8.0 (API স্তর 26) অনুযায়ী, আপনি একটি URI পেতে getDocumentUri()
পদ্ধতি ব্যবহার করতে পারেন যা প্রদত্ত mediaUri
এর মতো একই নথির উল্লেখ করে। যাইহোক, যেহেতু প্রত্যাবর্তিত ইউআরআই একটি DocumentsProvider
দ্বারা সমর্থিত, মিডিয়া সংগ্রহ পরিচালকরা স্কোপড ডিরেক্টরির গাছগুলি অতিক্রম না করেই সরাসরি নথিতে অ্যাক্সেস করতে পারেন। ফলস্বরূপ, মিডিয়া ম্যানেজাররা নথিতে উল্লেখযোগ্যভাবে আরও দ্রুত ফাইল অপারেশন করতে পারে।
সতর্কতা: getDocumentUri()
পদ্ধতি শুধুমাত্র মিডিয়া ফাইল সনাক্ত করে; এটি অ্যাপগুলিকে সেই ফাইলগুলি অ্যাক্সেস করার অনুমতি দেয় না। মিডিয়া ফাইলগুলিতে অ্যাক্সেসের অনুমতি কীভাবে পেতে হয় সে সম্পর্কে আরও জানতে, রেফারেন্স ডকুমেন্টেশন দেখুন।
নথির পথ
Android 8.0 (API স্তর 26) এ স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করার সময়, আপনি একটি নথির আইডি প্রদত্ত ফাইল সিস্টেমের রুট থেকে পথ নির্ধারণ করতে, DocumentsContract
এবং DocumentsProvider
উভয় ক্লাসেই উপলব্ধ findDocumentPath()
পদ্ধতি ব্যবহার করতে পারেন। পদ্ধতিটি একটি DocumentsContract.Path
অবজেক্টে এই পথটি ফেরত দেয়। যে ক্ষেত্রে একটি ফাইল সিস্টেমের একই নথিতে একাধিক সংজ্ঞায়িত পাথ রয়েছে, পদ্ধতিটি সেই পথটি ফেরত দেয় যা প্রদত্ত আইডি সহ নথিতে পৌঁছানোর জন্য প্রায়শই ব্যবহৃত হয়।
এই কার্যকারিতা নিম্নলিখিত পরিস্থিতিতে বিশেষভাবে দরকারী:
- আপনার অ্যাপটি একটি "সেভ এজ" ডায়ালগ ব্যবহার করে যা একটি নির্দিষ্ট নথির অবস্থান প্রদর্শন করে।
- আপনার অ্যাপটি অনুসন্ধান ফলাফলের দৃশ্যে ফোল্ডারগুলি দেখায় এবং ব্যবহারকারী সেই ফোল্ডারটি নির্বাচন করলে একটি নির্দিষ্ট ফোল্ডারের মধ্যে থাকা চাইল্ড ডকুমেন্টগুলি লোড করতে হবে৷
দ্রষ্টব্য: যদি আপনার অ্যাপের পাথে শুধুমাত্র কিছু নথি অ্যাক্সেস করার অনুমতি থাকে, findDocumentPath()
এর রিটার্ন মান শুধুমাত্র ফোল্ডার এবং নথিগুলি অন্তর্ভুক্ত করে যা আপনার অ্যাপ অ্যাক্সেস করতে পারে।
অডিও প্লেব্যাক নিরীক্ষণ
AudioManager
সিস্টেম পরিষেবা সক্রিয় AudioPlaybackConfiguration
অবজেক্টের একটি তালিকা বজায় রাখে, যার প্রতিটিতে একটি নির্দিষ্ট অডিও প্লেব্যাক সেশন সম্পর্কে তথ্য রয়েছে। getActivePlaybackConfigurations()
এ কল করে আপনার অ্যাপটি বর্তমানে-সক্রিয় কনফিগারেশনের সেট পুনরুদ্ধার করতে পারে।
অ্যান্ড্রয়েড 8.0 (API লেভেল 26) অনুযায়ী, আপনি একটি কলব্যাক নিবন্ধন করতে পারেন যা এক বা একাধিক AudioPlaybackConfiguration
অবজেক্ট পরিবর্তিত হলে আপনার অ্যাপকে বিজ্ঞপ্তি দেয়। এটি করার জন্য, registerAudioPlaybackCallback()
কল করুন, AudioManager.AudioPlaybackCallback
একটি উদাহরণে পাস করে। AudioManager.AudioPlaybackCallback
ক্লাসে onPlaybackConfigChanged()
পদ্ধতি রয়েছে, যা অডিও প্লেব্যাক কনফিগারেশন পরিবর্তন হলে সিস্টেম কল করে।
সংযোগ
ওয়াই-ফাই সচেতন
Android 8.0 (API লেভেল 26) Wi-Fi Aware-এর জন্য সমর্থন যোগ করে, যা Neighbour Awareness Networking (NAN) স্পেসিফিকেশনের উপর ভিত্তি করে। উপযুক্ত Wi-Fi Aware হার্ডওয়্যার সহ ডিভাইসগুলিতে, অ্যাপ এবং কাছাকাছি ডিভাইসগুলি ইন্টারনেট অ্যাক্সেস পয়েন্ট ছাড়াই Wi-Fi এর মাধ্যমে আবিষ্কার এবং যোগাযোগ করতে পারে৷ যত তাড়াতাড়ি সম্ভব ডিভাইসগুলিতে Wi-Fi সচেতন প্রযুক্তি আনতে আমরা আমাদের হার্ডওয়্যার অংশীদারদের সাথে কাজ করছি৷ কিভাবে আপনার অ্যাপে ওয়াই-ফাই অ্যাওয়্যারকে সংহত করতে হয় সে সম্পর্কে তথ্যের জন্য, ওয়াই-ফাই অ্যাওয়ার দেখুন।
ব্লুটুথ
Android 8.0 (API লেভেল 26) নিম্নলিখিত বৈশিষ্ট্যগুলি যোগ করে প্ল্যাটফর্মের ব্লুটুথ সমর্থনকে সমৃদ্ধ করে:
- AVRCP 1.4 স্ট্যান্ডার্ডের জন্য সমর্থন, যা গান-লাইব্রেরি ব্রাউজিং সক্ষম করে।
- Bluetooth Low-Energy (BLE) 5.0 স্ট্যান্ডার্ডের জন্য সমর্থন।
- ব্লুটুথ স্ট্যাকের মধ্যে Sony LDAC কোডেক ইন্টিগ্রেশন।
সঙ্গী ডিভাইস পেয়ারিং
Android 8.0 (API লেভেল 26) API প্রদান করে যা আপনাকে ব্লুটুথ, BLE, এবং Wi-Fi এর মাধ্যমে সহযোগী ডিভাইসগুলির সাথে পেয়ার করার চেষ্টা করার সময় পেয়ারিং রিকোয়েস্ট ডায়ালগ কাস্টমাইজ করতে দেয়। আরও তথ্যের জন্য, কম্প্যানিয়ন ডিভাইস পেয়ারিং দেখুন।
অ্যান্ড্রয়েডে ব্লুটুথ ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ব্লুটুথ গাইড দেখুন৷ Android 8.0 (API স্তর 26) এর জন্য নির্দিষ্ট ব্লুটুথের পরিবর্তনের জন্য, Android 8.0 আচরণ পরিবর্তন পৃষ্ঠার ব্লুটুথ বিভাগটি দেখুন।
শেয়ারিং
স্মার্ট শেয়ারিং
Android 8.0 (API লেভেল 26) ব্যবহারকারীদের ব্যক্তিগতকৃত শেয়ারিং পছন্দ সম্পর্কে শিখে এবং প্রতিটি ধরনের বিষয়বস্তু ভালোভাবে বোঝে যা শেয়ার করার জন্য সঠিক অ্যাপ। উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী একটি রসিদের ছবি তোলেন, তাহলে Android 8.0 একটি খরচ-ট্র্যাকিং অ্যাপের পরামর্শ দিতে পারে; যদি ব্যবহারকারী একটি সেলফি তোলে, একটি সামাজিক মিডিয়া অ্যাপ ছবিটি আরও ভালভাবে পরিচালনা করতে পারে। অ্যান্ড্রয়েড 8.0 স্বয়ংক্রিয়ভাবে ব্যবহারকারীদের ব্যক্তিগত পছন্দ অনুযায়ী এই সমস্ত নিদর্শন শিখে।
স্মার্ট শেয়ারিং image
ব্যতীত অন্যান্য ধরনের বিষয়বস্তুর জন্য কাজ করে, যেমন audio
, video
, text
, URL
ইত্যাদি।
স্মার্ট শেয়ারিং সক্ষম করতে, বিষয়বস্তু ভাগ করে এমন অভিপ্রায়ে তিনটি স্ট্রিং টীকা পর্যন্ত একটি ArrayList
যুক্ত করুন৷ টীকাগুলিকে বিষয়বস্তুর প্রধান উপাদান বা বিষয়গুলি বর্ণনা করা উচিত৷ নিম্নলিখিত কোড উদাহরণ দেখায় কিভাবে অভিপ্রায় টীকা যোগ করতে হয়:
কোটলিন
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
জাভা
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
স্মার্ট শেয়ারিং টীকা সম্পর্কে বিস্তারিত তথ্যের জন্য, EXTRA_CONTENT_ANNOTATIONS
দেখুন।
টেক্সট ক্লাসিফায়ার
সামঞ্জস্যপূর্ণ ডিভাইসে, অ্যাপগুলি একটি নতুন টেক্সট ক্লাসিফায়ার ব্যবহার করে চেক করতে পারে যে কোনও স্ট্রিং একটি পরিচিত ক্লাসিফায়ার সত্তা টাইপের সাথে মেলে কিনা এবং প্রস্তাবিত নির্বাচনের বিকল্প পেতে পারে। সিস্টেম দ্বারা স্বীকৃত সত্তাগুলির মধ্যে ঠিকানা, URL, টেলিফোন নম্বর এবং ইমেল ঠিকানা অন্তর্ভুক্ত রয়েছে। আরও তথ্যের জন্য, TextClassifier
দেখুন।
অ্যাক্সেসযোগ্যতা
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) ডেভেলপারদের জন্য বেশ কিছু নতুন অ্যাক্সেসিবিলিটি বৈশিষ্ট্য সমর্থন করে যারা তাদের নিজস্ব অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করে:
- অ্যাক্সেসিবিলিটি ভলিউম সামঞ্জস্য করার জন্য একটি নতুন ভলিউম বিভাগ।
- একটি ইনপুট প্রক্রিয়া হিসাবে আঙুলের ছাপের অঙ্গভঙ্গি ।
- বহুভাষিক পাঠ্য থেকে বক্তৃতা ক্ষমতা।
- একটি পছন্দের অ্যাক্সেসিবিলিটি পরিষেবা দ্রুত অ্যাক্সেস করার জন্য একটি হার্ডওয়্যার-ভিত্তিক অ্যাক্সেসিবিলিটি শর্টকাট ।
- ক্রমাগত অঙ্গভঙ্গি বা স্ট্রোকের প্রোগ্রামেটিক সিকোয়েন্সের জন্য সমর্থন।
- বেশ কয়েকটি সক্রিয় অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলির মধ্যে একটির জন্য একটি অ্যাক্সেসিবিলিটি বোতাম (শুধুমাত্র একটি সফ্টওয়্যার-রেন্ডার করা নেভিগেশন এলাকা ব্যবহার করে এমন ডিভাইসগুলিতে উপলব্ধ)।
- প্রমিত একতরফা পরিসীমা মান ।
- ইঙ্গিত পাঠ্য এবং অন-স্ক্রীন পাঠ্য অক্ষরগুলির অবস্থান সহ আরও সহজে পাঠ্য প্রক্রিয়াকরণের জন্য বেশ কয়েকটি বৈশিষ্ট্য।
নিরাপত্তা এবং গোপনীয়তা
অনুমতি
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) টেলিফোনি সম্পর্কিত বেশ কয়েকটি নতুন অনুমতি প্রবর্তন করে:
-
ANSWER_PHONE_CALLS
অনুমতি আপনার অ্যাপকে প্রোগ্রাম্যাটিকভাবে ইনকামিং ফোন কলের উত্তর দিতে দেয়। আপনার অ্যাপে একটি ইনকামিং ফোন কল পরিচালনা করতে, আপনিacceptRingingCall()
পদ্ধতি ব্যবহার করতে পারেন। -
READ_PHONE_NUMBERS
অনুমতি আপনার অ্যাপকে একটি ডিভাইসে সঞ্চিত ফোন নম্বরগুলিতে পড়ার অ্যাক্সেস দেয়৷
এই অনুমতিগুলি উভয়ই বিপজ্জনক হিসাবে শ্রেণীবদ্ধ এবং উভয়ই PHONE
অনুমতি গোষ্ঠীর অংশ৷
নতুন অ্যাকাউন্ট অ্যাক্সেস এবং আবিষ্কার APIs
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) অ্যাপগুলি কীভাবে ব্যবহারকারীর অ্যাকাউন্টগুলিতে অ্যাক্সেস পায় তার জন্য বেশ কয়েকটি উন্নতি প্রবর্তন করে৷ তারা যে অ্যাকাউন্টগুলি পরিচালনা করে তার জন্য, প্রমাণকারীরা তাদের নিজস্ব নীতি ব্যবহার করে সিদ্ধান্ত নিতে পারে যে কোনও অ্যাপ থেকে অ্যাকাউন্টগুলি লুকানো বা অ্যাকাউন্টগুলি প্রকাশ করা হবে কিনা। অ্যান্ড্রয়েড সিস্টেম এমন অ্যাপ্লিকেশন ট্র্যাক করে যা একটি নির্দিষ্ট অ্যাকাউন্ট অ্যাক্সেস করতে পারে।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, যে অ্যাপগুলি ব্যবহারকারীর অ্যাকাউন্টগুলির তালিকা ট্র্যাক করতে চেয়েছিল তাদের সমস্ত অ্যাকাউন্টের আপডেট পেতে হয়েছিল, যার মধ্যে সম্পর্কহীন ধরনের অ্যাকাউন্ট রয়েছে। Android 8.0 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
পদ্ধতি যোগ করে, যা অ্যাপগুলিকে অ্যাকাউন্টের প্রকারের একটি তালিকা নির্দিষ্ট করতে দেয় যার জন্য অ্যাকাউন্ট পরিবর্তনগুলি গ্রহণ করা উচিত৷
এপিআই পরিবর্তন
অ্যাকাউন্ট ম্যানেজার প্রমাণীকরণকারীদের সাহায্য করার জন্য ছয়টি নতুন পদ্ধতি সরবরাহ করে কোন অ্যাপগুলি একটি অ্যাকাউন্ট দেখতে পারে:
-
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: একটি নির্দিষ্ট ব্যবহারকারীর অ্যাকাউন্ট এবং প্যাকেজ সমন্বয়ের জন্য দৃশ্যমানতার স্তর সেট করে। -
getAccountVisibility(android.accounts.Account, java.lang.String)
: একটি নির্দিষ্ট ব্যবহারকারীর অ্যাকাউন্ট এবং প্যাকেজ সমন্বয়ের জন্য দৃশ্যমানতার স্তর পায়। -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: প্রমাণীকরণকারীদের একটি প্রদত্ত প্যাকেজের জন্য অ্যাকাউন্ট এবং দৃশ্যমানতার স্তর পেতে অনুমতি দেয়। -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: প্রমাণীকরণকারীদের একটি প্রদত্ত অ্যাকাউন্টের জন্য সঞ্চিত দৃশ্যমানতার মান পেতে অনুমতি দেয়। -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: প্রমাণীকরণকারীদের একটি অ্যাকাউন্টের দৃশ্যমানতা মান শুরু করার অনুমতি দেয় . -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
:AccountManager
অবজেক্টে একটিOnAccountsUpdateListener
শ্রোতা যোগ করে। যখনই ডিভাইসে অ্যাকাউন্টের তালিকা পরিবর্তন হয় তখন সিস্টেম এই শ্রোতাকে কল করে।
Android 8.0 (API স্তর 26) দুটি বিশেষ প্যাকেজ নামের মান প্রবর্তন করে যেটি অ্যাপ্লিকেশনগুলির জন্য দৃশ্যমানতার স্তরগুলি নির্দিষ্ট করতে যা setAccountVisibility(android.accounts.Account, java.lang.String, int)
পদ্ধতি ব্যবহার করে সেট করা হয়নি৷ PACKAGE_NAME_KEY_LEGACY_VISIBLE
দৃশ্যমানতা মানটি এমন অ্যাপগুলিতে প্রয়োগ করা হয় যেগুলির GET_ACCOUNTS
অনুমতি রয়েছে এবং Android এর লক্ষ্য সংস্করণগুলি Android 8.0-এর চেয়ে কম, বা যাদের স্বাক্ষরগুলি যেকোনো Android সংস্করণকে লক্ষ্য করে প্রমাণীকরণকারীর সাথে মেলে৷ PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
অ্যাপগুলির জন্য একটি ডিফল্ট দৃশ্যমানতার মান প্রদান করে যেগুলি আগে সেট করা হয়নি এবং যার জন্য PACKAGE_NAME_KEY_LEGACY_VISIBLE
প্রযোজ্য নয়৷
নতুন অ্যাকাউন্ট অ্যাক্সেস এবং আবিষ্কার API সম্পর্কে আরও তথ্যের জন্য, AccountManager
এবং OnAccountsUpdateListener
এর রেফারেন্স দেখুন।
টেস্টিং
ইন্সট্রুমেন্টেশন টেস্টিং
Android 8.0 (API লেভেল 26) আপনার অ্যাপের ইন্সট্রুমেন্টেশন পরীক্ষার জন্য নিম্নলিখিত অতিরিক্ত সহায়তা প্রদান করে।
নন-ডিফল্ট অ্যাপ প্রসেসের বিরুদ্ধে চালান
আপনি এখন নির্দিষ্ট করতে পারেন যে আপনার অ্যাপের ডিফল্ট প্রক্রিয়ার বাইরে একটি প্রক্রিয়ার বিরুদ্ধে একটি নির্দিষ্ট যন্ত্র পরীক্ষা চালানো উচিত। এই কনফিগারেশনটি উপযোগী যদি আপনার অ্যাপে একাধিক ক্রিয়াকলাপ থাকে যা বিভিন্ন প্রক্রিয়ায় চলে।
নন-ডিফল্ট প্রক্রিয়া উপকরণ সংজ্ঞায়িত করতে, আপনার ম্যানিফেস্ট ফাইলে নেভিগেট করুন, তারপর পছন্দসই <instrumentation>
উপাদানে। android:targetProcess
অ্যাট্রিবিউট যোগ করুন এবং এর মান নিম্নলিখিতগুলির একটিতে সেট করুন:
- একটি নির্দিষ্ট প্রক্রিয়ার নাম।
- প্রক্রিয়া নামের একটি কমা দ্বারা পৃথক করা তালিকা।
- একটি ওয়াইল্ডকার্ড (
"*"
), যাandroid:targetPackage
অ্যাট্রিবিউটে নির্দিষ্ট করা প্যাকেজে কোড নির্বাহ করে এমন কোনো লঞ্চ প্রক্রিয়ার বিরুদ্ধে ইনস্ট্রুমেন্টেশন চালানোর অনুমতি দেয়।
আপনার ইন্সট্রুমেন্টেশন পরীক্ষা চালানোর সময়, আপনি getProcessName()
কল করে এটি কোন প্রক্রিয়াটি পরীক্ষা করছে তা পরীক্ষা করতে পারেন।
পরীক্ষার সময় ফলাফল রিপোর্ট করুন
আপনি এখন addResults()
এ কল করে আপনার ইন্সট্রুমেন্টেশন পরীক্ষা চালানোর পরে ফলাফলের রিপোর্ট করতে পারেন।
পরীক্ষার জন্য উপহাস উদ্দেশ্য
আপনার অ্যাপের ক্রিয়াকলাপের জন্য বিচ্ছিন্ন, স্বাধীন UI পরীক্ষা তৈরি করা সহজ করতে, Android 8.0 (API স্তর 26) onStartActivity()
পদ্ধতি চালু করেছে। আপনি এই পদ্ধতিটিকে Instrumentation.ActivityMonitor
ক্লাসের একটি কাস্টম সাবক্লাসে ওভাররাইড করেন যা আপনার পরীক্ষার ক্লাসে আহ্বান করে এমন একটি নির্দিষ্ট অভিপ্রায় পরিচালনা করতে।
যখন আপনার পরীক্ষার ক্লাস অভিপ্রায় আহ্বান করে, তখন পদ্ধতিটি উদ্দেশ্যটি কার্যকর করার পরিবর্তে একটি স্টাব Instrumentation.ActivityResult
কার্যকলাপ ফলাফল অবজেক্ট প্রদান করে। আপনার পরীক্ষায় এই মক ইনটেন্ট লজিক ব্যবহার করে, আপনি কীভাবে আপনার অ্যাক্টিভিটি একটি ভিন্ন অ্যাক্টিভিটি বা সম্পূর্ণ ভিন্ন অ্যাপে পাস করার অভিপ্রায়কে প্রস্তুত করে এবং পরিচালনা করে তার উপর ফোকাস করতে পারেন।
রানটাইম ও টুলস
প্ল্যাটফর্ম অপ্টিমাইজেশান
অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) প্ল্যাটফর্মে রানটাইম এবং অন্যান্য অপ্টিমাইজেশান নিয়ে আসে যার ফলে অনেকগুলি কর্মক্ষমতা উন্নতি হয়। এই অপ্টিমাইজেশানগুলির মধ্যে সমসাময়িক-কম্প্যাকশন আবর্জনা সংগ্রহ, মেমরির আরও দক্ষ ব্যবহার এবং কোড স্থানীয়তা অন্তর্ভুক্ত রয়েছে।
এই অপ্টিমাইজেশনের ফলে দ্রুত বুট টাইম হয়, সেইসাথে OS এবং অ্যাপ উভয় ক্ষেত্রেই ভাল পারফরম্যান্স।
আপডেট করা জাভা ভাষা সমর্থন
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) বেশ কয়েকটি অতিরিক্ত ওপেনজেডিকে জাভা API-এর জন্য সমর্থন যোগ করে:
- OpenJDK 8 থেকে
java.time
। -
java.nio.file
এবং OpenJDK 7 থেকেjava.lang.invoke
।
এই নতুন-সংযোজিত প্যাকেজের মধ্যে ক্লাস এবং পদ্ধতি সম্পর্কে আরও জানতে, API রেফারেন্স ডকুমেন্টেশন দেখুন।
আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে জাভা 8 ভাষার বৈশিষ্ট্যগুলি ব্যবহার করতে চান তবে আপনাকে সর্বশেষ প্রিভিউ সংস্করণটি ডাউনলোড করতে হবে।
আপডেট করা ICU4J Android Framework APIs
Android 8.0 (API লেভেল 26) ICU4J Android Framework API-কে প্রসারিত করে — যা ICU4J API-এর একটি উপসেট—অ্যাপ ডেভেলপারদের android.icu
প্যাকেজের অধীনে ব্যবহার করার জন্য। এই APIগুলি ডিভাইসে উপস্থিত স্থানীয়করণ ডেটা ব্যবহার করে, তাই আপনি আপনার APK-এ ICU4J লাইব্রেরি কম্পাইল না করে আপনার APK ফুটপ্রিন্ট কমাতে পারেন।
অ্যান্ড্রয়েড এপিআই স্তর | আইসিইউ সংস্করণ | CLDR সংস্করণ | ইউনিকোড সংস্করণ |
---|---|---|---|
Android 7.0 (API স্তর 24), Android 7.1 (API স্তর 25) | 56 | 28 | ৮.০ |
Android 8.0 (API স্তর 26) | 58.2 | 30.0.3 | 9.0 |
ICU4J সমর্থন সহ Android-এ আন্তর্জাতিকীকরণ সম্পর্কে আরও তথ্যের জন্য, Android-এ আন্তর্জাতিকীকরণ দেখুন।
অ্যান্ড্রয়েড এন্টারপ্রাইজ
Android 8.0 (API লেভেল 26) চালিত ডিভাইসগুলির জন্য নতুন এন্টারপ্রাইজ বৈশিষ্ট্য এবং API চালু করা হয়েছে। হাইলাইট নিম্নলিখিত অন্তর্ভুক্ত:
- সম্পূর্ণরূপে পরিচালিত ডিভাইসগুলিতে কাজের প্রোফাইলগুলি উভয়কেই পরিচালনা করার সময়, ব্যক্তিগত ডেটা থেকে এন্টারপ্রাইজগুলিকে আলাদা করতে দেয়৷
- API অর্পণ ডিভাইস মালিকদের এবং প্রোফাইল মালিকদের অন্যান্য অ্যাপ্লিকেশনের জন্য অ্যাপ ব্যবস্থাপনা বরাদ্দ করার অনুমতি দেয়।
- প্রভিশনিং ফ্লোতে ব্যবহারকারীর অভিজ্ঞতার উন্নতি (নতুন কাস্টমাইজেশন বিকল্প সহ) সেটআপের সময় কমিয়ে দেয়।
- ব্লুটুথ, ওয়াই-ফাই, ব্যাকআপ এবং নিরাপত্তার উপর নতুন নিয়ন্ত্রণগুলি এন্টারপ্রাইজগুলিকে আরও ডিভাইস পরিচালনা করতে দেয়৷ নেটওয়ার্ক ক্রিয়াকলাপ লগিং এন্টারপ্রাইজগুলিকে সমস্যাগুলি ট্র্যাক করতে সহায়তা করে।
এগুলি এবং অন্যান্য নতুন Android এন্টারপ্রাইজ API এবং বৈশিষ্ট্যগুলি সম্পর্কে আরও জানতে, এন্টারপ্রাইজে Android দেখুন৷