Android 8.0 (API লেভেল ২৬) ব্যবহারকারী ও ডেভেলপারদের জন্য বিভিন্ন নতুন ফিচার ও ক্ষমতা নিয়ে এসেছে। ডেভেলপারদের জন্য নতুন কী আছে তা এই ডকুমেন্টে হাইলাইট করা হয়েছে।
এছাড়াও, প্ল্যাটফর্মের পরিবর্তন আপনার অ্যাপকে প্রভাবিত করতে পারে এমন ক্ষেত্রগুলি সম্পর্কে জানতে Android 8.0-এর আচরণগত পরিবর্তন চেক করতে ভুলবেন না।
ব্যবহারকারীর অভিজ্ঞতা
ছবির-মধ্যে-ছবি মোড
Android 8.0-এ ছবির-মধ্যে-ছবি।
Android 8.0 (API লেভেল ২৬) ছবির-মধ্যে-ছবি (PIP) মোডে অ্যাক্টিভিটি লঞ্চ করার অনুমতি দেয়। PIP হল বিশেষ ধরনের মাল্টি-উইন্ডো মোড যা সাধারণত ভিডিও প্লেব্যাকের জন্য ব্যবহার করা হয়। PIP মোড মূলত Android TV-এর জন্য উপলভ্য ছিল; Android 8.0 এই ফিচারটি অন্যান্য Android ডিভাইসে উপলভ্য করে।
কোনও অ্যাক্টিভিটি PIP মোডে থাকলে, সেটি পজ করা অবস্থায় থাকে, তবে কন্টেন্ট দেখানো
চালিয়ে যাওয়া উচিত। এই কারণে, আপনার অ্যাপ যাতে onPause()
হ্যান্ডলারে প্লেব্যাক পজ না করে তা নিশ্চিত করতে হবে। পরিবর্তে, আপনাকে onStop()-এ ভিডিও পজ করতে হবে এবং onStart()-এ প্লেব্যাক আবার চালু করতে হবে। আরও তথ্যের জন্য, মাল্টি-উইন্ডো
লাইফসাইকেল দেখুন।
আপনার অ্যাক্টিভিটি PIP মোড ব্যবহার করতে পারে তা নির্দিষ্ট করতে, ম্যানিফেস্টে
android:supportsPictureInPicture-কে true হিসেবে সেট করুন।
(Android 8.0 থেকে শুরু করে, PIP-এর জন্য
android:resizeableActivity ম্যানিফেস্ট অ্যাট্রিবিউটের প্রয়োজন হয় না।
তবে, আপনার অ্যাক্টিভিটি অন্যান্য
মাল্টি-উইন্ডো মোড সাপোর্ট করলে, আপনাকে অবশ্যই
android:resizeableActivity-কে `true` হিসেবে সেট করতে হবে।)
Android 8.0 (API লেভেল ২৬) একটি নতুন অবজেক্ট, PictureInPictureParams,
পরিচয় করিয়ে দেয়, যা আপনি PIP মোডে থাকাকালীন কোনও অ্যাক্টিভিটি কীভাবে আচরণ করবে তা নির্দিষ্ট করতে
PIP পদ্ধতিতে পাস করেন। এই অবজেক্ট অ্যাক্টিভিটির পছন্দের অ্যাস্পেক্ট রেশিওর মতো
প্রপার্টি নির্দিষ্ট করে।
ছবির-মধ্যে-ছবি যোগ করা বিভাগে বর্ণিত বর্তমান PIP পদ্ধতি এখন Android TV ছাড়াও সব Android ডিভাইসে ব্যবহার করা যাবে। এছাড়াও, Android 8.0-এ PIP মোড ব্যবহার করার জন্য নিম্নলিখিত পদ্ধতিগুলি প্রদান করা হয়েছে:
Activity.enterPictureInPictureMode(PictureInPictureParams args): অ্যাক্টিভিটি ছবির-মধ্যে-ছবি মোডে রাখে। অ্যাক্টিভিটির অ্যাস্পেক্ট রেশিও এবং অন্যান্য কনফিগারেশন সেটিংস args-এর মাধ্যমে নির্দিষ্ট করা হয়। args-এর কোনও ফিল্ড খালি থাকলে, আপনি শেষবারActivity.setPictureInPictureParams()-কে কল করার সময় যে ভ্যালু সেট করেছিলেন সিস্টেম সেটি ব্যবহার করে।নির্দিষ্ট অ্যাক্টিভিটি স্ক্রিনের এক কোণে দেখানো হয়; স্ক্রিনের বাকি অংশ স্ক্রিনে থাকা আগের অ্যাক্টিভিটি দিয়ে পূরণ করা হয়। PIP মোডে প্রবেশ করা অ্যাক্টিভিটি পজ করা অবস্থায় চলে যায়, তবে চালু থাকে। ব্যবহারকারী PIP অ্যাক্টিভিটিতে ট্যাপ করলে, সিস্টেম ব্যবহারকারীর ইন্টার্যাক্ট করার জন্য একটি মেনু দেখায়; PIP অবস্থায় থাকাকালীন কোনও টাচ ইভেন্ট অ্যাক্টিভিটিতে পৌঁছায় না।
-
Activity.setPictureInPictureParams(): অ্যাক্টিভিটির PIP কনফিগারেশন সেটিংস আপডেট করে। অ্যাক্টিভিটি বর্তমানে PIP মোডে থাকলে, সেটিংস আপডেট করা হয়; অ্যাক্টিভিটির অ্যাস্পেক্ট রেশিও পরিবর্তন হলে এটি কাজে লাগে। অ্যাক্টিভিটি PIP মোডে না থাকলে, আপনি যেenterPictureInPictureMode()মেথড কল করেন তা নির্বিশেষে এই কনফিগারেশন সেটিংস ব্যবহার করা হয়।
বিজ্ঞপ্তি
Android 8.0 (API লেভেল ২৬)-এ, আমরা বিজ্ঞপ্তিগুলি নতুনভাবে ডিজাইন করেছি যাতে বিজ্ঞপ্তির আচরণ এবং সেটিংস ম্যানেজ করার জন্য আরও সহজ এবং আরও সামঞ্জস্যপূর্ণ উপায় প্রদান করা যায়। এইসব পরিবর্তনের মধ্যে রয়েছে:
- বিজ্ঞপ্তি চ্যানেল: Android 8.0-এ বিজ্ঞপ্তি চ্যানেল পরিচয় করানো হয়েছে যা আপনাকে প্রতিটি ধরনের বিজ্ঞপ্তির জন্য ব্যবহারকারীর কাস্টমাইজ করা চ্যানেল তৈরি করতে দেয়। ইউজার ইন্টারফেসে বিজ্ঞপ্তি চ্যানেলকে বিজ্ঞপ্তির বিভাগ হিসেবে উল্লেখ করা হয়। কীভাবে বিজ্ঞপ্তি চ্যানেল প্রয়োগ করতে হয় তা জানতে, বিজ্ঞপ্তি চ্যানেল ম্যানেজ করা দেখুন।
- বিজ্ঞপ্তির ডট: Android 8.0-এ অ্যাপ লঞ্চার আইকনে ডট বা ব্যাজ দেখানোর সুবিধা চালু করা হয়েছে। ব্যবহারকারী এখনও বাতিল করেননি বা অ্যাকশন নেননি এমন বিজ্ঞপ্তি থাকলে বিজ্ঞপ্তির ডট দেখা যায়। বিজ্ঞপ্তির ডট কীভাবে কাজ করে তা জানতে, বিজ্ঞপ্তি ব্যাজ দেখুন।
- স্নুজ করা: ব্যবহারকারীরা বিজ্ঞপ্তি স্নুজ করতে পারেন, যার ফলে সেগুলি কিছু সময়ের জন্য অদৃশ্য হয়ে যায় এবং পরে আবার দেখা যায়। বিজ্ঞপ্তিগুলি প্রথমবার যে গুরুত্বের সাথে দেখানো হয়েছিল, সেই একই গুরুত্বের সাথে আবার দেখানো হয়। অ্যাপ স্নুজ করা বিজ্ঞপ্তি সরাতে বা আপডেট করতে পারে, তবে স্নুজ করা বিজ্ঞপ্তি আপডেট করলে তা আবার দেখা যায় না।
- বিজ্ঞপ্তি টাইম-আউট:
setTimeoutAfter()ব্যবহার করে বিজ্ঞপ্তি তৈরি করার সময় আপনি টাইম-আউট সেট করতে পারবেন। আপনি এই পদ্ধতি ব্যবহার করে এমন একটি সময়সীমা নির্দিষ্ট করতে পারেন যার পরে বিজ্ঞপ্তি বাতিল করা উচিত। প্রয়োজন হলে, নির্দিষ্ট টাইমআউট সময়সীমা শেষ হওয়ার আগে আপনি বিজ্ঞপ্তি বাতিল করতে পারবেন। - বিজ্ঞপ্তি সেটিংস: আপনি
setSettingsText()কল করে সেই টেক্সট সেট করতে পারবেন যাNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCESইনটেন্ট ব্যবহার করে কোনও বিজ্ঞপ্তি থেকে আপনার অ্যাপের বিজ্ঞপ্তি সেটিংসের লিঙ্ক তৈরি করার সময় দেখা যায়। সিস্টেম নিম্নলিখিত অতিরিক্ত তথ্য প্রদান করতে পারে, যার উদ্দেশ্য হল আপনার অ্যাপ ব্যবহারকারীদের যে সেটিংস দেখাতে হবে তা ফিল্টার করা:EXTRA_CHANNEL_ID,NOTIFICATION_TAGএবংNOTIFICATION_ID। - বিজ্ঞপ্তি বাতিল করা: ব্যবহারকারীরা নিজেরাই বিজ্ঞপ্তি বাতিল করতে পারেন এবং
অ্যাপ প্রোগ্রামগতভাবে সেগুলি সরাতে পারে। আপনি
NotificationListenerServiceক্লাস থেকেonNotificationRemoved()পদ্ধতি প্রয়োগ করে কখন বিজ্ঞপ্তি বাতিল করা হয়েছে এবং কেন বাতিল করা হয়েছে তা নির্ধারণ করতে পারবেন। - ব্যাকগ্রাউন্ডের রঙ: আপনি বিজ্ঞপ্তির জন্য ব্যাকগ্রাউন্ডের রঙ সেট ও চালু করতে
পারবেন। আপনাকে শুধুমাত্র সেইসব চলমান টাস্কের বিজ্ঞপ্তিতে এই ফিচার ব্যবহার করতে হবে
যেগুলি ব্যবহারকারীর এক ঝলকে দেখা অত্যন্ত গুরুত্বপূর্ণ। যেমন,
আপনি গাড়ি চালানোর দিকনির্দেশ বা কোনও ফোন কল চলাকালীন
বিজ্ঞপ্তির জন্য ব্যাকগ্রাউন্ডের রঙ সেট করতে পারেন। এছাড়াও, আপনি
setColor()ব্যবহার করে পছন্দসই ব্যাকগ্রাউন্ডের রঙ সেট করতে পারবেন। এটি করলে, আপনিsetColorized()ব্যবহার করে বিজ্ঞপ্তির জন্য ব্যাকগ্রাউন্ড কালার ব্যবহার করার সুবিধা চালু করতে পারবেন। - মেসেজিং স্টাইল: Android 8.0-এ, যেসব বিজ্ঞপ্তি
MessagingStyleক্লাস ব্যবহার করে, সেগুলি তাদের কোল্যাপ্স করা ফর্মে আরও কন্টেন্ট দেখায়। মেসেজিং-সম্পর্কিত বিজ্ঞপ্তির জন্যMessagingStyleক্লাস ব্যবহার করা উচিত। এছাড়াও, আপনিaddHistoricMessage()পদ্ধতি ব্যবহার করে মেসেজিং-সম্পর্কিত বিজ্ঞপ্তিতে পুরনো মেসেজ যোগ করার মাধ্যমে কথোপকথনের প্রসঙ্গ প্রদান করতে পারেন।
Android 8.0-এ বিজ্ঞপ্তি দেখতে ব্যবহারকারীরা অ্যাপ লঞ্চার আইকনে বেশিক্ষণ প্রেস করে রাখতে পারেন।
অটোফিল ফ্রেমওয়ার্ক
অ্যাকাউন্ট তৈরি, লগ-ইন এবং ক্রেডিট কার্ড ট্রানজ্যাকশন করতে সময় লাগে এবং ভুল হওয়ার সম্ভাবনা থাকে। এই ধরনের পুনরাবৃত্তিমূলক টাস্ক করতে হয় এমন অ্যাপ ব্যবহার করে ব্যবহারকারীরা সহজেই বিরক্ত হয়ে যেতে পারেন।
Android 8.0 (API লেভেল ২৬) ভার্সনে 'অটোফিল ফ্রেমওয়ার্ক' চালু করার ফলে লগ-ইন ও ক্রেডিট কার্ডের ফর্মের মতো ফর্ম পূরণ করা আরও সহজ হয়েছে। ব্যবহারকারী অটোফিল করার বিকল্প বেছে নেওয়ার পরে, পুরনো ও নতুন অ্যাপ 'অটোফিল ফ্রেমওয়ার্ক' ফিচারের সাথে কাজ করে।
ফ্রেমওয়ার্কের সাথে আপনার অ্যাপ কীভাবে কাজ করে তা অপ্টিমাইজ করতে আপনি কিছু পদক্ষেপ নিতে পারেন। আরও তথ্যের জন্য, অটোফিল ফ্রেমওয়ার্ক ওভারভিউ দেখুন।
ডাউনলোড করা যাবে এমন ফন্ট
Android 8.0 (API লেভেল ২৬) এবং Android সাপোর্ট লাইব্রেরি ২৬ আপনাকে APK-তে ফন্ট বান্ডেল করার বা APK-কে ফন্ট ডাউনলোড করতে দেওয়ার পরিবর্তে প্রোভাইডার অ্যাপ্লিকেশন থেকে ফন্টের জন্য অনুরোধ করতে দেয়। এই ফিচার আপনার APK সাইজ কমায়, অ্যাপ ইনস্টলেশনের সাফল্যের হার বাড়ায় এবং একাধিক অ্যাপকে একই ফন্ট শেয়ার করার অনুমতি দেয়।
ফন্ট ডাউনলোড করার ব্যাপারে আরও তথ্যের জন্য, ডাউনলোড করা যাবে এমন ফন্ট দেখুন।
XML-এ ফন্ট
Android 8.0 (API লেভেল ২৬) একটি নতুন ফিচার নিয়ে এসেছে, XML-এ ফন্ট, যা
আপনাকে রিসোর্স হিসেবে ফন্ট ব্যবহার করতে দেয়। এর অর্থ হল, অ্যাসেট হিসেবে ফন্ট বান্ডেল করার
প্রয়োজন নেই। R ফাইলে ফন্ট কম্পাইল করা হয় এবং সিস্টেমে রিসোর্স হিসেবে
অটোমেটিক উপলভ্য হয়। আপনি তখন নতুন রিসোর্স টাইপ, font-এর সাহায্যে
এইসব ফন্ট অ্যাক্সেস করতে পারবেন।
API ভার্সন ১৪ এবং তার পরবর্তী ভার্সন চলছে এমন ডিভাইসে এই ফিচারকে সাপোর্ট লাইব্রেরি ২৬ সম্পূর্ণ সহায়তা প্রদান করে।
রিসোর্স হিসেবে ফন্ট ব্যবহার করা এবং সিস্টেম ফন্ট ফিরিয়ে আনার ব্যাপারে আরও তথ্যের জন্য, XML-এ ফন্ট দেখুন।
অটোসাইজিং TextView
Android 8.0 (API লেভেল ২৬) আপনাকে TextView-এর সাইজের উপর ভিত্তি করে টেক্সটের সাইজ অটোমেটিক বড় বা ছোট করার সুবিধা দেয়। এর অর্থ হল, বিভিন্ন স্ক্রিনে বা পরিবর্তনশীল কন্টেন্টের সাথে টেক্সটের সাইজ অপ্টিমাইজ করা অনেক সহজ। Android 8.0-এ TextView-এর অটোমেটিক সাইজ পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, TextView-এর অটোমেটিক সাইজ পরিবর্তন দেখুন।
অ্যাডাপ্টিভ আইকন
Android 8.0 (API লেভেল ২৬) ভার্সনে অ্যাডাপ্টিভ লঞ্চার আইকন চালু করা হয়েছে। অ্যাডাপ্টিভ আইকন ভিজ্যুয়াল এফেক্ট সাপোর্ট করে এবং বিভিন্ন ডিভাইস মডেল জুড়ে বিভিন্ন ধরনের আকার দেখাতে পারে। কীভাবে অ্যাডাপ্টিভ আইকন তৈরি করতে হয় তা জানতে, অ্যাডাপ্টিভ আইকন গাইড দেখুন।
রঙ ম্যানেজমেন্ট
ইমেজিং অ্যাপের Android ডেভেলপাররা এখন নতুন ডিভাইসের সুবিধা নিতে পারবেন যেগুলিতে ওয়াইড-গ্যামাট কালার ডিসপ্লে রয়েছে। ওয়াইড গ্যামাট ছবি দেখাতে, অ্যাপকে তার ম্যানিফেস্টে (প্রতি অ্যাক্টিভিটি অনুযায়ী) একটি ফ্ল্যাগ চালু করতে হবে এবং এম্বেড করা ওয়াইড কালার প্রোফাইল (AdobeRGB, Pro Photo RGB, DCI-P3 ইত্যাদি) সহ বিটম্যাপ লোড করতে হবে।
WebView API
আপনার অ্যাপে ওয়েব কন্টেন্ট দেখায় এমন WebView অবজেক্ট ম্যানেজ করতে সাহায্য করার জন্য
Android 8.0 বেশ কিছু API প্রদান করে।
আপনার অ্যাপের স্থায়িত্ব ও নিরাপত্তা উন্নত করে এমন এইসব API-এর মধ্যে
নিম্নলিখিতগুলি অন্তর্ভুক্ত:
- Version API
- Google SafeBrowsing API
- Termination Handle API
- Renderer Importance API
এইসব API কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে আরও জানতে, WebView ম্যানেজ করা দেখুন।
WebView ক্লাসে এখন একটি Safe Browsing API অন্তর্ভুক্ত করা হয়েছে যা ওয়েব ব্রাউজিংয়ের নিরাপত্তা
আরও উন্নত করে। আরও তথ্যের জন্য, Google Safe Browsing API দেখুন।
শর্টকাট ও উইজেট পিন করা
Android 8.0 (API লেভেল ২৬) শর্টকাট ও উইজেটের ইন-অ্যাপ পিন করার সুবিধা নিয়ে এসেছে। আপনার অ্যাপে, ব্যবহারকারীর অনুমতি সাপেক্ষে, কাজ করে এমন লঞ্চারের জন্য আপনি পিন করা শর্টকাট ও উইজেট তৈরি করতে পারবেন।
আরও তথ্যের জন্য, শর্টকাট ও উইজেট পিন করা ফিচার সংক্রান্ত নির্দেশিকা দেখুন।
স্ক্রিনের সর্বাধিক অ্যাস্পেক্ট রেশিও
Android 8.0 (API লেভেল 26) অ্যাপের সর্বাধিক অ্যাস্পেক্ট রেশিও কীভাবে কনফিগার করতে হয় সেই বিষয়ে পরিবর্তন নিয়ে আসে।
প্রথমত, Android 8.0-এ maxAspectRatio অ্যাট্রিবিউট চালু করা হয়েছে, যা ব্যবহার করে আপনি অ্যাপের সর্বাধিক অ্যাস্পেক্ট রেশিও সেট করতে পারবেন। এছাড়াও, Android 8.0 ও তার পরবর্তী যেকোনও ভার্সনে, কোনও অ্যাপের ডিফল্ট সর্বাধিক অ্যাস্পেক্ট রেশিও হল সেই ডিভাইসের নেটিভ অ্যাস্পেক্ট রেশিও, যেটিতে অ্যাপটি চলছে।
সর্বাধিক অ্যাস্পেক্ট রেশিও ঘোষণা করার ব্যাপারে আরও তথ্য পেতে, একাধিক স্ক্রিন সাপোর্ট করা দেখুন।
মাল্টি-ডিসপ্লে সহায়তা
Android 8.0 (API লেভেল ২৬) থেকে শুরু করে, প্ল্যাটফর্মটি একাধিক ডিসপ্লের জন্য উন্নত সহায়তা প্রদান করে। কোনও অ্যাক্টিভিটি মাল্টি-উইন্ডো মোড সাপোর্ট করলে এবং একাধিক ডিসপ্লে সহ ডিভাইসে রান করলে, ব্যবহারকারী অ্যাক্টিভিটি একটি ডিসপ্লে থেকে অন্য ডিসপ্লেতে সরাতে পারবেন। কোনও অ্যাপ অ্যাক্টিভিটি লঞ্চ করলে, অ্যাপটি নির্দিষ্ট করতে পারে যে কোন ডিসপ্লেতে অ্যাক্টিভিটি চালানো উচিত।
মনে রাখবেন: কোনও অ্যাক্টিভিটি মাল্টি-উইন্ডো মোডে কাজ করলে, Android 8.0 অটোমেটিক সেই অ্যাক্টিভিটির জন্য মাল্টি-ডিসপ্লে সাপোর্ট চালু করে দেয়। মাল্টি-ডিসপ্লে এনভায়রনমেন্টে আপনার অ্যাপ ঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে আপনাকে সেটি পরীক্ষা করে দেখতে হবে।
অ্যাপে একাধিক ডিসপ্লে থাকলেও, একবারে শুধুমাত্র একটি অ্যাক্টিভিটি আবার শুরু করা অবস্থায় থাকতে পারে। যে অ্যাক্টিভিটিতে ফোকাস করা হয়েছে সেটি আবার চালু করা হয়েছে; অন্যান্য সব দৃশ্যমান অ্যাক্টিভিটি পজ করা হয়েছে, তবে বন্ধ করা হয়নি। একাধিক অ্যাক্টিভিটি দেখা গেলে, অ্যাক্টিভিটি লাইফসাইকেল সম্পর্কে আরও তথ্যের জন্য, মাল্টি-উইন্ডো লাইফসাইকেল দেখুন।
কোনও ব্যবহারকারী একটি ডিসপ্লে থেকে অন্য ডিসপ্লেতে অ্যাক্টিভিটি সরালে, সিস্টেম অ্যাক্টিভিটির সাইজ পরিবর্তন করে এবং প্রয়োজন অনুযায়ী রানটাইম পরিবর্তন করে। আপনার অ্যাক্টিভিটি কনফিগারেশন পরিবর্তন নিজেই ম্যানেজ করতে পারে অথবা এটি সিস্টেমকে আপনার অ্যাক্টিভিটি সহ প্রসেসটি ধ্বংস করতে এবং নতুন ডাইমেনশন সহ এটি আবার তৈরি করার অনুমতি দিতে পারে। আরও তথ্যের জন্য, কনফিগারেশন পরিবর্তন ম্যানেজ করা দেখুন।
ActivityOptions একাধিক ডিসপ্লেতে কাজ করার জন্য দুটি নতুন পদ্ধতি
প্রদান করে:
setLaunchDisplayId()- অ্যাক্টিভিটি চালু হলে কোন ডিসপ্লেতে তা দেখানো হবে তা নির্দিষ্ট করে।
getLaunchDisplayId()- অ্যাক্টিভিটির বর্তমান লঞ্চ ডিসপ্লে দেখায়।
একাধিক ডিসপ্লেতে কাজ করার জন্য adb শেল এক্সটেন্ড করা হয়েছে।
shell start কমান্ড এখন কোনও অ্যাক্টিভিটি লঞ্চ করতে,
এবং অ্যাক্টিভিটির টার্গেট ডিসপ্লে নির্দিষ্ট করতে ব্যবহার করা যেতে পারে:
adb shell start <activity_name> --display <display_id>
ইউনিফায়েড লেআউট মার্জিন ও প্যাডিং
Android 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 লেভেল ২৬)-এর একটি নতুন ফিচার যা আপনার অ্যাপের ফোকাস করা ভিউতে মাউসের সব ইভেন্ট ডেলিভার করার মাধ্যমে এই ধরনের কন্ট্রোল প্রদান করে।
Android 8.0 থেকে শুরু করে, আপনার অ্যাপে একটি View পয়েন্টার ক্যাপচারের অনুরোধ করতে পারে
এবং ক্যাপচার করা পয়েন্টার ইভেন্ট প্রসেস করার জন্য একটি লিসেনার সংজ্ঞায়িত করতে পারে। এই মোডে
মাউস পয়েন্টার লুকানো থাকে। মাউস সংক্রান্ত তথ্যের আর প্রয়োজন না থাকলে,
ভিউ পয়েন্টার ক্যাপচার রিলিজ করতে পারে। ভিউ থেকে ফোকাস সরে গেলে, যেমন ব্যবহারকারী অন্য কোনও অ্যাপ খুললে, সিস্টেম পয়েন্টার ক্যাপচার রিলিজ করে দিতে পারে।
আপনার অ্যাপে এই ফিচার কীভাবে ব্যবহার করবেন সেই সম্পর্কে তথ্যের জন্য, পয়েন্টার ক্যাপচার দেখুন।
অ্যাপের বিভাগ
Android 8.0 (API লেভেল ২৬) প্রতিটি অ্যাপকে প্রাসঙ্গিক হলে, এটি যে বিভাগে ফিট করে তা ঘোষণা করার অনুমতি দেয়। এইসব বিভাগ ব্যবহারকারীদের কাছে একই ধরনের উদ্দেশ্য বা ফাংশন সহ অ্যাপগুলিকে একসাথে ক্লাস্টার করতে ব্যবহার করা হয়, যেমন ডেটা ব্যবহার, ব্যাটারি ব্যবহার বা
স্টোরেজ ব্যবহার। আপনার <application> ম্যানিফেস্ট ট্যাগে android:appCategory অ্যাট্রিবিউট সেট করে
আপনি নিজের অ্যাপের জন্য একটি বিভাগ নির্ধারণ করতে পারেন।
Android TV লঞ্চার
Android 8.0 (API লেভেল 26)-এ নতুন কন্টেন্ট-কেন্দ্রিক, Android TV হোম স্ক্রিন অভিজ্ঞতা অন্তর্ভুক্ত, যা Android 8.0-এর জন্য Android TV এমুলেটর এবং Nexus Player ডিভাইস ইমেজের সাথে উপলভ্য। নতুন হোম স্ক্রিন চ্যানেলের সাথে সম্পর্কিত সারিতে ভিডিও কন্টেন্ট সাজায়, যার প্রতিটি সিস্টেমে একটি অ্যাপের মাধ্যমে প্রোগ্রাম দ্বারা জনবহুল হয়। অ্যাপ একাধিক চ্যানেল প্রকাশ করতে পারে এবং ব্যবহারকারীরা হোম স্ক্রিনে কোন চ্যানেল দেখতে চান তা কনফিগার করতে পারেন। Android TV-এর হোম স্ক্রিনে 'পরের ভিডিওটি দেখুন' সারিও অন্তর্ভুক্ত থাকে, যা ব্যবহারকারীর দেখার অভ্যাসের উপর ভিত্তি করে অ্যাপ থেকে প্রোগ্রাম দিয়ে ভর্তি করা হয়। এছাড়াও, অ্যাপ ভিডিও প্রিভিউ প্রদান করতে পারে, যা ব্যবহারকারী কোনও প্রোগ্রামে ফোকাস করলে অটোমেটিক চালানো হয়। চ্যানেল ও প্রোগ্রাম পপুলেট করার API হল TvProvider API-এর অংশ, যা Android 8.0-এর সাথে Android সাপোর্ট লাইব্রেরি মডিউল হিসেবে ডিস্ট্রিবিউট করা হয়।
AnimatorSet
Android 8.0 (API লেভেল ২৬) থেকে শুরু করে, AnimatorSet API এখন রিভার্সে খোঁজা এবং চালানোর সুবিধা
প্রদান করে। সিকিং আপনাকে অ্যানিমেশন সেটের পজিশন নির্দিষ্ট সময়ে সেট করতে দেয়। আপনার অ্যাপে যদি এমন অ্যাকশনের জন্য অ্যানিমেশন থাকে যা আগের অবস্থায় ফিরিয়ে আনা যায়,
তাহলে রিভার্সে চালানো উপযোগী হতে পারে। দুটি আলাদা অ্যানিমেশন সেট করার পরিবর্তে, আপনি একই অ্যানিমেশন উল্টোভাবে চালাতে পারেন।
ইনপুট ও নেভিগেশন
কীবোর্ড নেভিগেশন ক্লাস্টার
আপনার অ্যাপের কোনও অ্যাক্টিভিটি যদি জটিল ভিউ হায়ারার্কি ব্যবহার করে, যেমন ছবি ২-এ দেখানো হয়েছে, তাহলে UI এলিমেন্টের গ্রুপগুলিকে ক্লাস্টারে সাজানোর কথা বিবেচনা করুন যাতে সেগুলির মধ্যে কীবোর্ড নেভিগেশন সহজ হয়। ব্যবহারকারীরা Chromebook ডিভাইসে Meta+Tab বা Search+Tab প্রেস করে একটি ক্লাস্টার থেকে অন্য ক্লাস্টারে নেভিগেট করতে পারবেন। ক্লাস্টারের ভালো উদাহরণের মধ্যে রয়েছে: সাইড প্যানেল, নেভিগেশন বার, মূল কন্টেন্ট এরিয়া এবং এমন এলিমেন্ট যেখানে অনেক চাইল্ড এলিমেন্ট থাকতে পারে।
View বা ViewGroup এলিমেন্টকে
ক্লাস্টার করতে, এলিমেন্টের লেআউট XML ফাইলে
android:keyboardNavigationCluster অ্যাট্রিবিউটকে
true হিসেবে সেট করুন অথবা আপনার অ্যাপের UI লজিকে setKeyboardNavigationCluster()-এ
true পাস করুন।
মনে রাখবেন: ক্লাস্টার নেস্ট করা যায় না, যদিও নেস্ট করা হয়নি এমন
ক্লাস্টার হায়ারার্কির বিভিন্ন লেভেলে দেখা যেতে পারে। আপনি যদি
ক্লাস্টার নেস্ট করার চেষ্টা করেন, তাহলে ফ্রেমওয়ার্ক শুধুমাত্র সবচেয়ে উপরের
ViewGroup এলিমেন্টকে ক্লাস্টার হিসেবে বিবেচনা করে।
টাচস্ক্রিন আছে এমন ডিভাইসে, আপনি ক্লাস্টার-নির্দিষ্ট
ViewGroup অবজেক্টের
android:touchscreenBlocksFocus এলিমেন্ট true-এ সেট করতে পারেন যাতে
শুধুমাত্র ক্লাস্টার নেভিগেশন সেই ক্লাস্টারে এবং তার বাইরে ব্যবহার করা যায়। আপনি এই কনফিগারেশন কোনও ক্লাস্টারে প্রয়োগ করলে, ব্যবহারকারীরা Tab কী বা তীরচিহ্ন কী ব্যবহার করে ক্লাস্টারের মধ্যে বা বাইরে নেভিগেট করতে পারবেন না; তার পরিবর্তে তাদের ক্লাস্টার নেভিগেশন কীবোর্ড কম্বিনেশন প্রেস করতে হবে।
ডিফল্ট ফোকাস দেখুন
Android 8.0 (API লেভেল ২৬)-এ, আপনি View অ্যাসাইন করতে পারেন যা (পুনরায়) তৈরি করা অ্যাক্টিভিটি আবার শুরু হওয়ার পরে এবং ব্যবহারকারী কীবোর্ড নেভিগেশন কী, যেমন ট্যাব কী প্রেস করলে
ফোকাস পাবে। এই "ডিফল্ট হিসেবে ফোকাস করা" সেটিং
প্রয়োগ করতে, UI এলিমেন্ট সহ লেআউট XML ফাইলে
View এলিমেন্টের
android:focusedByDefault অ্যাট্রিবিউট true-এ সেট করুন অথবা আপনার
অ্যাপের UI লজিকে setFocusedByDefault()-এ
true পাস করুন।
স্পিচ আউটপুট
অ্যাক্টিভিটি ও পরিষেবা, কন্টেন্ট ডিক্টেট ও উচ্চারণ করতে
TextToSpeech-এর ইনস্ট্যান্স ব্যবহার করতে পারে। Android 8.0 (API লেভেল 26) থেকে,
আপনার অ্যাপ টেক্সট-টু-স্পিচ ইঞ্জিন কখন আলাদা আলাদা সিন্থেসাইজ করা শব্দ বলতে শুরু করে সেই সম্পর্কে আরও সঠিক টাইমিং তথ্য পেতে পারে,
যতক্ষণ না ইঞ্জিন এই তথ্য প্রদান করে। টেক্সট-টু-স্পিচ ইঞ্জিন কোনও শব্দ উচ্চারণ করার সময়
সেটির প্রতি মনোযোগ আকর্ষণ করতে আপনি এই কার্যকারিতা
ব্যবহার করতে পারেন।
আপনার অ্যাপে এই টেক্সট-টু-স্পিচ ইঞ্জিন সংক্রান্ত উন্নতি ব্যবহার করতে, UtteranceProgressListener-এর ইনস্ট্যান্স
রেজিস্টার করুন। রেজিস্ট্রেশন প্রসেসের অংশ হিসেবে, onRangeStart()
পদ্ধতির জন্য একটি হ্যান্ডলার অন্তর্ভুক্ত করুন।
টেক্সট-টু-স্পিচ ইঞ্জিন
rangeStart()-কে কল করে
সেই সময় রেকর্ড করার জন্য যখন এটি আশা করে যে নির্দিষ্ট রেঞ্জের টেক্সটের অডিও প্লেব্যাক
শুরু হবে। সেই টেক্সট রেঞ্জের অডিও প্লেব্যাক শুরু হলে, আপনার অ্যাপের
onRangeStart()
মেথড এক্সিকিউট হয়। আপনার অ্যাপ তখন এই কলব্যাকে সাড়া দিতে পারে, যেমন
উচ্চারণের সাথে যুক্ত টেক্সট রেঞ্জ হাইলাইট করে।
টেক্সট-টু-স্পিচ ইঞ্জিনের প্লেব্যাক প্রগ্রেস ট্র্যাক করার ব্যাপারে আরও তথ্যের জন্য, UtteranceProgressListener ক্লাস
রেফারেন্স দেখুন।
সিস্টেম
নতুন StrictMode ডিটেক্টর
Android 8.0 (API লেভেল ২৬) আপনার অ্যাপে সম্ভাব্য বাগ শনাক্ত করতে সাহায্য করার জন্য তিনটি নতুন StrictMode ডিটেক্টর যোগ করে:
- আপনার অ্যাপ বাফারিং ছাড়াই ডেটা রিড বা রাইট করলে,
detectUnbufferedIo()তা শনাক্ত করবে, যা পারফর্ম্যান্সের উপর মারাত্মক প্রভাব ফেলতে পারে। - আপনার অ্যাপের বাইরে কোনও অ্যাক্টিভিটি শুরু করার সময়, আপনার অ্যাপ ভুলবশত অন্য কোনও অ্যাপকে অনুমতি দিতে ভুলে গেলে,
detectContentUriWithoutPermission()তা শনাক্ত করবে। - আপনার অ্যাপ যখন ডিবাগিংয়ের উদ্দেশ্যে আপনার ট্রাফিক ট্যাগ করার জন্য
setThreadStatsTag(int)ব্যবহার না করে নেটওয়ার্ক ট্রাফিক পারফর্ম করে, তখনdetectUntaggedSockets()তা শনাক্ত করবে।
ক্যাশে করা ডেটা
Android 8.0 (API লেভেল ২৬) ক্যাশে করা ডেটার ব্যাপারে আরও ভালো নির্দেশিকা ও আচরণ প্রদান করে। প্রতিটি
অ্যাপকে এখন ক্যাশে করা ডেটার জন্য ডিস্ক স্টোরেজে খালি জায়গার কোটা দেওয়া হয়েছে, যেমনটি
getCacheQuotaBytes(UUID) দ্বারা ফেরত দেওয়া হয়েছে।
সিস্টেমকে ডিস্ক স্টোরেজে খালি জায়গা করতে হলে, এটি সেইসব অ্যাপের ক্যাশে ফাইল মুছে দেওয়া শুরু করবে যেগুলি তাদের জন্য বরাদ্দ কোটার থেকে সবচেয়ে বেশি জায়গা ব্যবহার করেছে। তাই, আপনি যদি ক্যাশে করা ডেটা আপনার বরাদ্দ কোটার মধ্যে রাখেন, তাহলে আপনার ক্যাশে করা ফাইলগুলি সিস্টেমের শেষ কিছু ফাইলের মধ্যে থাকবে যা প্রয়োজন হলে মুছে ফেলা হবে। আপনার অ্যাপের মধ্যে কোন ক্যাশে ফাইল মুছে ফেলতে হবে তা সিস্টেম যখন সিদ্ধান্ত নেয়, তখন এটি প্রথমে সবচেয়ে পুরনো ফাইলগুলি বিবেচনা করবে (পরিবর্তিত সময় দ্বারা নির্ধারিত)।
এছাড়াও, দুটি নতুন আচরণ আছে যা আপনি প্রতি-ডিরেক্টরি ভিত্তিতে চালু করতে পারবেন যাতে সিস্টেম কীভাবে আপনার ক্যাশে করা ডেটা খালি করে তা নিয়ন্ত্রণ করা যায়:
StorageManager.setCacheBehaviorAtomic()ব্যবহার করে এটি বোঝানো যেতে পারে যে একটি ডিরেক্টরি এবং এর সমস্ত কন্টেন্ট একটি একক অ্যাটমিক ইউনিট হিসাবে মুছে ফেলা উচিত।setCacheBehaviorTombstone(File, boolean)ব্যবহার করে এটি বোঝানো যেতে পারে যে কোনও ডিরেক্টরির মধ্যে থাকা ফাইল মুছে দেওয়ার পরিবর্তে, সেগুলিকে ট্রাঙ্কেট করে 0 বাইট দৈর্ঘ্যের করে দেওয়া উচিত, যাতে খালি ফাইলটি অক্ষত থাকে।
অবশেষে, বড় ফাইলের জন্য ডিস্ক স্টোরেজে খালি জায়গা বরাদ্দ করতে হলে, নতুন
allocateBytes(FileDescriptor, long) API ব্যবহার করার কথা বিবেচনা করুন, যা আপনার অনুরোধ পূরণ করতে অন্যান্য অ্যাপের (প্রয়োজন অনুযায়ী) ক্যাশে ফাইল
অটোমেটিক মুছে দেবে। আপনার নতুন ডেটা সেভ করার জন্য ডিভাইসে পর্যাপ্ত ডিস্ক স্টোরেজে খালি জায়গা আছে কিনা তা সিদ্ধান্ত নেওয়ার সময়, getUsableSpace() ব্যবহার করার পরিবর্তে
getAllocatableBytes(UUID) কল করুন, কারণ আগেরটি সিস্টেম আপনার পক্ষ থেকে মুছে ফেলতে ইচ্ছুক এমন কোনও ক্যাশে করা
ডেটা বিবেচনা করবে।
কন্টেন্ট প্রোভাইডার পেজিং
আমরা কন্টেন্ট প্রোভাইডার আপডেট করেছি যাতে একবারে একটি পৃষ্ঠায় বড় ডেটাসেট লোড করার জন্য সহায়তা অন্তর্ভুক্ত করা যায়। যেমন, হাজার হাজার ছবি সহ একটি ফটো অ্যাপ, একটি পৃষ্ঠায় উপস্থাপন করার জন্য ডেটার একটি সাবসেটের জন্য কোয়েরি করতে পারে। কন্টেন্ট প্রোভাইডারের মাধ্যমে ফেরত পাঠানো ফলাফলের প্রতিটি পৃষ্ঠা একটিমাত্র কার্সর অবজেক্টের মাধ্যমে দেখানো হয়। এই ফিচার ব্যবহার করতে হলে, ক্লায়েন্ট ও পরিষেবা প্রদানকারী, উভয়কেই পেজিং প্রয়োগ করতে হবে।
কন্টেন্ট প্রোভাইডারের ক্ষেত্রে হওয়া পরিবর্তন সম্পর্কে বিস্তারিত তথ্য পেতে, ContentProvider এবং
ContentProviderClient দেখুন।
কন্টেন্ট রিফ্রেশ করার অনুরোধ
ContentProvider এবং
ContentResolver ক্লাসে এখন প্রতিটি একটি করে
refresh() পদ্ধতি অন্তর্ভুক্ত করে, যা ক্লায়েন্টদের জন্য তাদের অনুরোধ করা তথ্য আপ-টু-ডেট আছে কিনা তা জানা সহজ করে তোলে।
ContentProvider
এক্সটেন্ড করে আপনি কাস্টম কন্টেন্ট রিফ্রেশিং লজিক যোগ করতে পারবেন। আপনি নিজে ডেটা রিফ্রেশ করার চেষ্টা করেছেন তা আপনার পরিষেবা প্রদানকারীর ক্লায়েন্টদের জানাতে, true রিটার্ন করতে
refresh() পদ্ধতি ওভাররাইড করেছেন কিনা তা নিশ্চিত করুন।
আপনার ক্লায়েন্ট অ্যাপ, অন্য একটি পদ্ধতি কল করে স্পষ্টভাবে রিফ্রেশ করা কন্টেন্টের জন্য অনুরোধ করতে পারে, যাকে
refresh()-ও বলা হয়। এই পদ্ধতি কল করার সময়, রিফ্রেশ করার জন্য ডেটার URI পাস করুন।
মনে রাখবেন: আপনি নেটওয়ার্কের মাধ্যমে ডেটার অনুরোধ করতে পারেন,
তাই কন্টেন্ট বাসি হয়ে গেছে বলে জোরালো ইঙ্গিত পেলে তবেই
ক্লায়েন্ট সাইড থেকে refresh() ইনভোক করা উচিত।
এই ধরনের কন্টেন্ট রিফ্রেশ করার সবচেয়ে সাধারণ কারণ হল
রিফ্রেশ করতে সোয়াইপ করুন
জেসচারের প্রতিক্রিয়া, যা স্পষ্টভাবে বর্তমান UI-কে আপ-টু-ডেট কন্টেন্ট দেখানোর জন্য অনুরোধ করে।
JobScheduler-এ উন্নতি
Android 8.0 (API লেভেল 26) JobScheduler-এ বেশ কিছু উন্নতি করেছে। এইসব উন্নতির ফলে আপনার অ্যাপের পক্ষে নতুন ব্যাকগ্রাউন্ড
এক্সিকিউশন সীমা মেনে চলা সহজ হয়, কারণ আপনি সাধারণত শিডিউল করা কাজ ব্যবহার করে
এখন-সীমাবদ্ধ ব্যাকগ্রাউন্ড পরিষেবা বা ইমপ্লিসিট ব্রডকাস্ট রিসিভার প্রতিস্থাপন করতে পারেন।
JobScheduler-এ করা আপডেটের মধ্যে এগুলি অন্তর্ভুক্ত:
-
আপনি এখন শিডিউল করা কাজের সাথে একটি কাজের সারি যুক্ত করতে পারবেন। জবের সারিতে কাজের আইটেম যোগ করতে,
JobScheduler.enqueue()-এ কল করুন। জব চলাকালীন, এটি সারি থেকে বাকি থাকা কাজ নিয়ে প্রসেস করতে পারে। এই কার্যকারিতা এমন অনেক ব্যবহারের কেস ম্যানেজ করে যা আগে ব্যাকগ্রাউন্ড পরিষেবা চালু করার জন্য প্রয়োজন হত, বিশেষ করে সেইসব পরিষেবা যাIntentServiceপ্রয়োগ করে। -
Android
Support Library 26.0.0 একটি নতুন
JobIntentServiceক্লাস নিয়ে এসেছে, যাIntentService-এর মতো একই ফাংশনালিটি প্রদান করে, তবে Android 8.0 (API লেভেল ২৬) বা তার পরবর্তী যেকোনও ভার্সনে রান করার সময় পরিষেবার পরিবর্তে জব ব্যবহার করে। -
আপনি এখন
JobInfo.Builder.setClipData()নম্বরে কল করে চাকরির সাথেClipDataযুক্ত করতে পারবেন। এই বিকল্পটি আপনাকে একটি কাজের সাথে URI অনুমতির অনুদান যুক্ত করতে দেয়, ঠিক যেভাবে এই অনুমতিগুলিContext.startService()-এ প্রচার করা যেতে পারে। এছাড়াও, আপনি কাজের সারিতে ইনটেন্টের সাথে URI অনুমতির সুবিধা ব্যবহার করতে পারবেন। -
শিডিউল করা কাজ এখন বেশ কিছু নতুন সীমাবদ্ধতা সমর্থন করে:
JobInfo.isRequireStorageNotLow()- ডিভাইসে উপলভ্য স্টোরেজ কম থাকলে কাজ রান করে না।
JobInfo.isRequireBatteryNotLow()- ব্যাটারির লেভেল থ্রেশহোল্ডের সমান বা তার নিচে থাকলে জব রান করে না; এই লেভেলে ডিভাইস ব্যাটারিতে চার্জ কম আছে সতর্কতা সিস্টেম ডায়ালগ দেখায়।
NETWORK_TYPE_METERED- জবের জন্য মিটার করা নেটওয়ার্ক কানেকশন প্রয়োজন, যেমন বেশিরভাগ মোবাইল ডেটা প্ল্যান।
কাস্টম ডেটা স্টোর
Android 8.0 (API লেভেল 26) আপনাকে নিজের পছন্দ অনুযায়ী কাস্টম ডেটা স্টোর প্রদান করতে দেয়, যা আপনার অ্যাপ ক্লাউড বা স্থানীয় ডেটাবেসে পছন্দ স্টোর করলে অথবা পছন্দ ডিভাইস-নির্দিষ্ট হলে উপযোগী হতে পারে। ডেটা স্টোর প্রয়োগ করার ব্যাপারে আরও তথ্যের জন্য, কাস্টম ডেটা স্টোর দেখুন।
মিডিয়া এনহ্যান্সমেন্ট
VolumeShaper
একটি নতুন VolumeShaper ক্লাস আছে। ফেড-ইন, ফেড-আউট এবং ক্রস ফেডের মতো ছোট অটোমেটিক ভলিউম ট্রানজিশন পারফর্ম করতে এটি
ব্যবহার করুন।
আরও জানতে VolumeShaper-এর মাধ্যমে অ্যামপ্লিটিউড নিয়ন্ত্রণ করা
দেখুন।
অডিও ফোকাস সংক্রান্ত উন্নতি
অডিও অ্যাপ অডিও ফোকাসের অনুরোধ করে এবং তা ছেড়ে দিয়ে ডিভাইসে অডিও আউটপুট শেয়ার করে।
প্লেব্যাক শুরু বা বন্ধ করে অথবা ভলিউম কমিয়ে দিয়ে কোনও অ্যাপ ফোকাসে পরিবর্তন ম্যানেজ করে।
একটি নতুন AudioFocusRequest ক্লাস আছে। এই ক্লাসকে
requestAudioFocus()-এর প্যারামিটার হিসেবে ব্যবহার করে,
অডিও ফোকাসে পরিবর্তন ম্যানেজ করার সময় অ্যাপের নতুন ক্ষমতা থাকে:
অটোমেটিক ডাকিং এবং
বিলম্বিত ফোকাস গেইন।
মিডিয়া মেট্রিক
একটি নতুন getMetrics() পদ্ধতি একটি PersistableBundle
অবজেক্ট প্রদান করে যাতে কনফিগারেশন
এবং পারফরম্যান্স তথ্য থাকে, যা অ্যাট্রিবিউট এবং মানের একটি ম্যাপ হিসাবে প্রকাশ করা হয়।
এইসব মিডিয়া ক্লাসের জন্য getMetrics() পদ্ধতি সংজ্ঞায়িত করা হয়েছে:
MediaPlayer.getMetrics()MediaRecorder.getMetrics()MediaCodec.getMetrics()MediaExtractor.getMetrics()
প্রতিটি ইনস্ট্যান্সের জন্য আলাদাভাবে মেট্রিক সংগ্রহ করা হয় এবং ইনস্ট্যান্সের লাইফটাইমের জন্য অপরিবর্তিত থাকে। কোনও মেট্রিক উপলভ্য না থাকলে, মেথড null রিটার্ন করে। প্রকৃত মেট্রিক রিটার্ন করা ক্লাসের উপর নির্ভর করে।
MediaPlayer
Android 8.0 (API লেভেল ২৬) থেকে MediaPlayer DRM-সুরক্ষিত কন্টেন্ট এবং HLS স্যাম্পেল-লেভেল এনক্রিপ্টেড মিডিয়া প্লেব্যাক করতে পারে।
Android 8.0-এ নতুন ওভারলোড করা
seekTo() কমান্ড চালু করা হয়েছে যা কোনও ফ্রেম খোঁজার সময়
ফাইন-গ্রেনড কন্ট্রোল প্রদান করে। এতে দ্বিতীয় প্যারামিটার অন্তর্ভুক্ত থাকে যা সিক মোড নির্দিষ্ট করে:
SEEK_PREVIOUS_SYNCমিডিয়ার পজিশন সিঙ্ক (বা কী) ফ্রেমে সরিয়ে দেয় যা নির্দিষ্ট সময়ের ঠিক আগে বা সেই সময়ে অবস্থিত ডেটা সোর্সের সাথে যুক্ত।SEEK_NEXT_SYNCমিডিয়ার পজিশন সিঙ্ক (বা কী) ফ্রেমে সরিয়ে দেয় যা প্রদত্ত সময়ের ঠিক পরে বা সেই সময়ে অবস্থিত ডেটা সোর্সের সাথে সম্পর্কিত।SEEK_CLOSEST_SYNCমিডিয়ার পজিশন এমন একটি সিঙ্ক (বা কী) ফ্রেমে সরিয়ে দেয় যা প্রদত্ত সময়ের সবচেয়ে কাছাকাছি বা সেই সময়ে অবস্থিত ডেটা সোর্সের সাথে যুক্ত।SEEK_CLOSESTমিডিয়ার পজিশন এমন একটি ফ্রেমে (সিঙ্ক বা কী ফ্রেম নাও হতে পারে) সরিয়ে দেয় যা কোনও ডেটা সোর্সের সাথে যুক্ত এবং প্রদত্ত সময়ের সবচেয়ে কাছাকাছি বা প্রদত্ত সময়ে অবস্থিত।
ক্রমাগত খুঁজতে থাকলে, অ্যাপের SEEK_CLOSEST-এর পরিবর্তে SEEK_ মোডের যেকোনও একটি ব্যবহার করা উচিত, যা তুলনামূলকভাবে ধীর গতিতে চলে তবে আরও সুনির্দিষ্ট হতে পারে।
MediaRecorder
- MediaRecorder এখন MPEG2_TS ফর্ম্যাট সাপোর্ট করে যা স্ট্রিমিংয়ের জন্য
উপযোগী:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
জাভা
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxerএখন যেকোনও সংখ্যক অডিও এবং ভিডিও স্ট্রিম ম্যানেজ করতে পারে। আপনি আর একটি অডিও ট্র্যাক এবং/অথবা একটি ভিডিও ট্র্যাকের মধ্যে সীমাবদ্ধ নন।addTrack()ব্যবহার করে যত খুশি ট্র্যাক মিক্স করুন।- এছাড়াও,
MediaMuxerএক বা একাধিক মেটাডেটা ট্র্যাক যোগ করতে পারে যাতে ব্যবহারকারীর দ্বারা নির্ধারিত প্রতি-ফ্রেম তথ্য থাকে। আপনার অ্যাপ্লিকেশন মেটাডেটার ফর্ম্যাট নির্ধারণ করে। মেটাডেটা ট্র্যাক শুধুমাত্র MP4 কন্টেনারের জন্য কাজ করে।
অফলাইন প্রসেসিংয়ের জন্য মেটাডেটা উপযোগী হতে পারে। যেমন, ভিডিও স্টেবিলাইজেশনের জন্য সেন্সর থেকে পাওয়া জাইরো সিগন্যাল ব্যবহার করা হতে পারে।
মেটাডেটা ট্র্যাক যোগ করার সময়, ট্র্যাকের মাইম ফর্ম্যাট অবশ্যই "application/" প্রিফিক্স দিয়ে শুরু হতে হবে। মেটাডেটা লেখা ভিডিও/অডিও ডেটা লেখার মতোই, শুধু
ডেটা MediaCodec থেকে আসে না। পরিবর্তে, অ্যাপটি
writeSampleData() পদ্ধতিতে সংশ্লিষ্ট টাইমস্ট্যাম্প সহ একটি
ByteBuffer পাস করে।
ভিডিও ও অডিও ট্র্যাকের মতো টাইমস্ট্যাম্পও একই টাইম বেসে থাকতে হবে।
জেনারেট করা MP4 ফাইলটি ISOBMFF-এর 12.3.3.2 বিভাগে সংজ্ঞায়িত TextMetaDataSampleEntry ব্যবহার করে মেটাডেটার MIME ফর্ম্যাটকে সিগন্যাল করে। মেটাডেটা ট্র্যাক সহ ফাইল এক্সট্র্যাক্ট করার জন্য MediaExtractor ব্যবহার করার সময়, মেটাডেটার মাইম
ফর্ম্যাট MediaFormat-এ এক্সট্র্যাক্ট করা হবে।
উন্নত মিডিয়া ফাইল অ্যাক্সেস
Storage Access Framework (SAF) অ্যাপকে কাস্টম
DocumentsProvider প্রকাশ করার অনুমতি দেয়, যা অন্যান্য অ্যাপকে ডেটা সোর্সে
ফাইল অ্যাক্সেস করার সুবিধা প্রদান করতে পারে। আসলে, কোনও ডকুমেন্ট প্রদানকারী
এমনকি নেটওয়ার্ক স্টোরেজে থাকা বা মিডিয়া ট্রান্সফার প্রোটোকল (MTP)-এর মতো
প্রোটোকল ব্যবহার করে এমন ফাইলেও
অ্যাক্সেস প্রদান করতে পারে।
তবে, রিমোট ডেটা সোর্স থেকে বড় মিডিয়া ফাইল অ্যাক্সেস করার সময় কিছু সমস্যা দেখা দেয়:
- মিডিয়া প্লেয়ারের জন্য ডকুমেন্ট প্রদানকারীর থেকে কোনও ফাইলে সিক করার অ্যাক্সেস প্রয়োজন। কোনও রিমোট ডেটা সোর্সে বড় মিডিয়া ফাইল থাকলে, ডকুমেন্ট প্রদানকারীকে অবশ্যই আগে থেকে সব ডেটা নিয়ে আসতে হবে এবং একটি স্ন্যাপশট ফাইল ডেসক্রিপটর তৈরি করতে হবে। ফাইল ডেসক্রিপটর ছাড়া মিডিয়া প্লেয়ার ফাইলটি চালাতে পারবে না, তাই ডকুমেন্ট প্রদানকারী ফাইলটি ডাউনলোড করা শেষ না করা পর্যন্ত প্লেব্যাক শুরু করা যাবে না।
- মিডিয়া কালেকশন ম্যানেজার, যেমন ফটো অ্যাপ, অবশ্যই অ্যাক্সেস URI-এর একটি সিরিজ অতিক্রম করে মিডিয়াতে পৌঁছাতে হবে যা স্কোপড ফোল্ডারের মাধ্যমে এক্সটার্নাল এসডি কার্ডে স্টোর করা আছে। এই অ্যাক্সেস প্যাটার্ন মিডিয়াতে অনেক অপারেশন—যেমন সরানো, কপি করা ও মুছে ফেলা—অনেক ধীর করে দেয়।
- মিডিয়া কালেকশন ম্যানেজার কোনও ডকুমেন্টের URI থেকে তার লোকেশন নির্ধারণ করতে পারে না। এর ফলে, এই ধরনের অ্যাপের ক্ষেত্রে ব্যবহারকারীদের মিডিয়া ফাইল সেভ করার জায়গা বেছে নেওয়ার অনুমতি দেওয়া কঠিন হয়ে পড়ে।
Android 8.0, Storage Access Framework উন্নত করার মাধ্যমে এই প্রতিটি সমস্যার সমাধান করে।
কাস্টম ডকুমেন্ট প্রদানকারী
Android 8.0 থেকে শুরু করে, Storage Access Framework, কাস্টম ডকুমেন্ট প্রোভাইডারদের রিমোট ডেটা সোর্সে থাকা ফাইলের জন্য সিক করা যায় এমন ফাইল ডেসক্রিপটর তৈরি করার অনুমতি দেয়। নেটিভ সিকেবেল ফাইল ডেসক্রিপটর পেতে SAF কোনও ফাইল খুলতে পারে। SAF তখন ডকুমেন্ট প্রদানকারীকে ডিসক্রিট বাইট অনুরোধ ডেলিভার করে। এই ফিচার, কোনও ডকুমেন্ট প্রদানকারীকে, মিডিয়া প্লেয়ার অ্যাপের অনুরোধ করা বাইটের সঠিক রেঞ্জ ফেরত দেওয়ার অনুমতি দেয়। এর ফলে, আগে থেকে সম্পূর্ণ ফাইল ক্যাশে করতে হয় না।
এই ফিচার ব্যবহার করতে, আপনাকে নতুন
StorageManager.openProxyFileDescriptor() মেথড কল করতে হবে। openProxyFileDescriptor()
পদ্ধতিটি কলব্যাক হিসেবে ProxyFileDescriptorCallback অবজেক্ট গ্রহণ করে। ডকুমেন্ট প্রদানকারীর থেকে ফেরত আসা ফাইল ডেসক্রিপটরে ক্লায়েন্ট অ্যাপ্লিকেশন ফাইল অপারেশন করার সময় SAF
কলব্যাককে আহ্বান করে।
ডকুমেন্ট সরাসরি অ্যাক্সেস করা
Android 8.0 (API লেভেল ২৬) থেকে, আপনি
getDocumentUri() পদ্ধতি ব্যবহার করে
এমন একটি URI পেতে পারেন যা প্রদত্ত mediaUri-এর মতো একই ডকুমেন্টকে রেফারেন্স করে।
তবে, ফেরত আসা URI-এর ব্যাক-আপ
DocumentsProvider-এর মাধ্যমে নেওয়া হয় বলে, মিডিয়া কালেকশন ম্যানেজাররা সরাসরি ডকুমেন্ট অ্যাক্সেস করতে পারেন, এর জন্য তাদের স্কোপ করা ডিরেক্টরির ট্রি ট্রাভার্স করতে হয় না।
এর ফলে, মিডিয়া ম্যানেজাররা ডকুমেন্টে ফাইল অপারেশন অনেক দ্রুত
করতে পারবেন।
সতর্কতা: getDocumentUri() পদ্ধতি শুধুমাত্র মিডিয়া ফাইল লোকেট করে; এটি অ্যাপকে
সেইসব ফাইল অ্যাক্সেস করার অনুমতি দেয় না। মিডিয়া ফাইলের অ্যাক্সেস অনুমতি কীভাবে পাবেন সেই সম্পর্কে আরও জানতে, রেফারেন্স ডকুমেন্টেশন দেখুন।
ডকুমেন্টের পাথ
Android 8.0 (API লেভেল ২৬)-এ স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করার সময়, আপনি
findDocumentPath() পদ্ধতি ব্যবহার করতে পারেন, যা
DocumentsContract এবং
DocumentsProvider
উভয় ক্লাসেই উপলভ্য, যাতে কোনও ডকুমেন্টের আইডি থেকে ফাইল সিস্টেমের রুট থেকে পাথ নির্ধারণ করা যায়। এই পদ্ধতিটি DocumentsContract.Path অবজেক্টে এই পাথ রিটার্ন করে। কোনও ফাইল সিস্টেমে একই ডকুমেন্টের জন্য একাধিক পাথ থাকলে, এই পদ্ধতিটি সেই পাথটি রিটার্ন করে যা প্রদত্ত আইডি সহ ডকুমেন্টে পৌঁছানোর জন্য সবচেয়ে বেশি ব্যবহৃত হয়।
এই কার্যকারিতা বিশেষ করে নিম্নলিখিত পরিস্থিতিতে উপযোগী:
- আপনার অ্যাপ "এই নামে সেভ করুন" ডায়ালগ ব্যবহার করে যা নির্দিষ্ট ডকুমেন্টের লোকেশন দেখায়।
- আপনার অ্যাপ সার্চ ফলাফলে ফোল্ডার দেখায় এবং ব্যবহারকারী কোনও নির্দিষ্ট ফোল্ডার বেছে নিলে তার মধ্যে থাকা চাইল্ড ডকুমেন্ট অবশ্যই লোড করতে হবে।
মনে রাখবেন: আপনার অ্যাপের যদি পাথের মধ্যে থাকা কিছু ডকুমেন্ট অ্যাক্সেস করার
অনুমতি থাকে, তাহলে findDocumentPath()-এর রিটার্ন ভ্যালুতে শুধুমাত্র
সেইসব ফোল্ডার ও ডকুমেন্ট অন্তর্ভুক্ত থাকে যেগুলি আপনার অ্যাপ অ্যাক্সেস করতে পারে।
অডিও প্লেব্যাক মনিটর করা হচ্ছে
AudioManager সিস্টেম পরিষেবা অ্যাক্টিভ AudioPlaybackConfiguration অবজেক্টের তালিকা
মেইনটেইন করে, যার প্রত্যেকটিতে
নির্দিষ্ট অডিও প্লেব্যাক সেশন সম্পর্কে তথ্য থাকে। আপনার অ্যাপ
getActivePlaybackConfigurations()-এ কল করে বর্তমানে অ্যাক্টিভ কনফিগারেশনের সেট
ফিরিয়ে আনতে পারে।
Android 8.0 (API লেভেল ২৬) থেকে, আপনি একটি কলব্যাক রেজিস্টার করতে পারেন যা এক বা একাধিক
AudioPlaybackConfiguration অবজেক্ট পরিবর্তিত হলে
আপনার অ্যাপকে বিজ্ঞপ্তি দেয়। এটি করতে,
AudioManager.AudioPlaybackCallback-এর ইনস্ট্যান্স পাস করে
registerAudioPlaybackCallback() কল করুন। AudioManager.AudioPlaybackCallback
ক্লাসে
onPlaybackConfigChanged() পদ্ধতি আছে, অডিও প্লেব্যাক কনফিগারেশন পরিবর্তন হলে সিস্টেম যা কল করে।
কানেক্টিভিটি
Wi-Fi Aware
Android 8.0 (API লেভেল ২৬) ভার্সনে Wi-Fi Aware-এর জন্য সহায়তা যোগ করা হয়েছে, যা নেইবার অ্যাওয়ারনেস নেটওয়ার্কিং (NAN) স্পেসিফিকেশনের উপর ভিত্তি করে তৈরি। উপযুক্ত Wi-Fi Aware হার্ডওয়্যার আছে এমন ডিভাইসে, অ্যাপ ও আশেপাশের ডিভাইস, ইন্টারনেট অ্যাক্সেস পয়েন্ট ছাড়াই ওয়াই-ফাইয়ের মাধ্যমে একে অপরকে খুঁজে পেতে ও যোগাযোগ করতে পারে। যত তাড়াতাড়ি সম্ভব ডিভাইসে Wi-Fi Aware প্রযুক্তি নিয়ে আসার জন্য আমরা হার্ডওয়্যার পার্টনারদের সাথে কাজ করছি। আপনার অ্যাপে কীভাবে Wi-Fi Aware ইন্টিগ্রেট করবেন সেই সম্পর্কে তথ্য পেতে, Wi-Fi Aware দেখুন।
ব্লুটুথ
Android 8.0 (API লেভেল ২৬) নিম্নলিখিত ফিচার যোগ করে প্ল্যাটফর্মের ব্লুটুথ সাপোর্টকে আরও সমৃদ্ধ করে:
- AVRCP 1.4 স্ট্যান্ডার্ডের জন্য সহায়তা, যা গান-লাইব্রেরি ব্রাউজিং চালু করে।
- ব্লুটুথ লো-এনার্জি (BLE) 5.0 স্ট্যান্ডার্ডের জন্য সহায়তা।
- ব্লুটুথ স্ট্যাকে Sony LDAC কোডেক ইন্টিগ্রেট করা।
কম্প্যানিয়ন ডিভাইস পেয়ারিং
Android 8.0 (API লেভেল 26) এমন API প্রদান করে যা আপনাকে ব্লুটুথ, BLE এবং ওয়াই-ফাইয়ের মাধ্যমে কম্প্যানিয়ন ডিভাইসের সাথে পেয়ার করার চেষ্টা করার সময় পেয়ারিং অনুরোধের ডায়ালগ কাস্টমাইজ করতে দেয়। আরও তথ্যের জন্য, কম্প্যানিয়ন ডিভাইস পেয়ারিং দেখুন।
Android-এ ব্লুটুথ ব্যবহার করা সম্পর্কে আরও তথ্যের জন্য, ব্লুটুথ নির্দেশিকা দেখুন। Android 8.0 (API লেভেল ২৬)-এর জন্য নির্দিষ্ট ব্লুটুথের পরিবর্তনের জন্য, Android 8.0 আচরণ পরিবর্তন পৃষ্ঠার ব্লুটুথ বিভাগটি দেখুন।
শেয়ার করা
স্মার্ট শেয়ারিং
Android 8.0 (API লেভেল ২৬) ব্যবহারকারীর পছন্দমতো শেয়ারিংয়ের পছন্দ সম্পর্কে জানে এবং প্রতিটি ধরনের কন্টেন্টের জন্য কোন অ্যাপের মাধ্যমে শেয়ার করা উপযুক্ত হবে তা আরও ভালোভাবে বোঝে। যেমন, কোনও ব্যবহারকারী রসিদের ফটো তুললে, Android 8.0 খরচ ট্র্যাক করার অ্যাপ সাজেস্ট করতে পারে; ব্যবহারকারী সেলফি তুললে, সোশ্যাল মিডিয়া অ্যাপ সেই ছবি আরও ভালভাবে ম্যানেজ করতে পারে। Android 8.0 অটোমেটিক ব্যবহারকারীর পছন্দ অনুযায়ী এইসব প্যাটার্ন শিখে নেয়।
স্মার্ট শেয়ারিং image ছাড়া অন্যান্য ধরনের কন্টেন্টের জন্য কাজ করে, যেমন
audio, video, text, URL,
ইত্যাদি।
স্মার্ট শেয়ারিং চালু করতে, কন্টেন্ট শেয়ার করে এমন ইনটেন্টে সর্বাধিক তিনটি স্ট্রিং অ্যানোটেশনের
ArrayList যোগ করুন। অ্যানোটেশনে কন্টেন্টের প্রধান উপাদান বা বিষয়গুলি বর্ণনা করা উচিত। নিম্নলিখিত কোডের উদাহরণ
ইনটেন্টে কীভাবে অ্যানোটেশন যোগ করতে হয় তা দেখায়:
Kotlin
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 দেখুন।
অ্যাক্সেসিবিলিটি
Android 8.0 (API লেভেল ২৬) ভার্সনে, যেসব ডেভেলপার নিজস্ব অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করেন, তাদের জন্য বেশ কিছু নতুন অ্যাক্সেসিবিলিটি ফিচার কাজ করে:
- অ্যাক্সেসিবিলিটি ভলিউম অ্যাডজাস্ট করার জন্য নতুন ভলিউম বিভাগ।
- ইনপুট মেকানিজম হিসেবে ফিঙ্গারপ্রিন্ট জেসচার।
- মাল্টিলিঙ্গুয়াল টেক্সট-টু-স্পিচ সংক্রান্ত ক্ষমতা।
- হার্ডওয়্যার-ভিত্তিক অ্যাক্সেসিবিলিটি শর্টকাট যা পছন্দের অ্যাক্সেসিবিলিটি পরিষেবা দ্রুত অ্যাক্সেস করতে সাহায্য করে।
- অবিরাম জেসচার বা স্ট্রোকের প্রোগ্রামেটিক সিকোয়েন্সের জন্য সহায়তা।
- একাধিক চালু থাকা অ্যাক্সেসিবিলিটি ফিচারের মধ্যে একটিকে কল করার জন্য অ্যাক্সেসিবিলিটি বোতাম (শুধুমাত্র সফ্টওয়্যার-রেন্ডার করা নেভিগেশন এরিয়া ব্যবহার করে এমন ডিভাইসে উপলভ্য)।
- স্ট্যান্ডার্ডাইজড এক-পার্শ্বিক রেঞ্জ ভ্যালু।
- আরও সহজে টেক্সট প্রসেস করার জন্য একাধিক ফিচার, যার মধ্যে রয়েছে ইঙ্গিত টেক্সট এবং অন-স্ক্রিন টেক্সট অক্ষরের লোকেশন।
নিরাপত্তা ও গোপনীয়তা
অনুমতি
Android 8.0 (API লেভেল ২৬) টেলিফোনি সম্পর্কিত বেশ কিছু নতুন অনুমতি চালু করেছে:
-
ANSWER_PHONE_CALLSঅনুমতি আপনার অ্যাপকে প্রোগ্রাম্যাটিকভাবে ইনকামিং ফোন কলের উত্তর দেওয়ার অনুমতি দেয়। আপনার অ্যাপে ইনকামিং ফোন কল ম্যানেজ করতে, আপনিacceptRingingCall()পদ্ধতি ব্যবহার করতে পারেন। -
READ_PHONE_NUMBERSঅনুমতি আপনার অ্যাপকে ডিভাইসে সেভ করা ফোন নম্বর অ্যাক্সেস করার অনুমতি দেয়।
এই দুটি পারমিশনই
বিপজ্জনক
হিসেবে শ্রেণীবদ্ধ করা হয়েছে এবং দুটিই
PHONE
পারমিশন গ্রুপের অংশ।
নতুন অ্যাকাউন্ট অ্যাক্সেস ও ডিসকভারি API
Android 8.0 (API লেভেল ২৬) অ্যাপ কীভাবে ব্যবহারকারীর অ্যাকাউন্টে অ্যাক্সেস পায়, সেই বিষয়ে বেশ কিছু উন্নতি করেছে। যেসব অ্যাকাউন্ট তারা ম্যানেজ করে, সেগুলির ক্ষেত্রে, কোনও অ্যাপ থেকে অ্যাকাউন্ট লুকানো হবে নাকি দেখানো হবে, সেই সিদ্ধান্ত নিতে প্রমাণীকরণকারী নিজস্ব নীতি ব্যবহার করতে পারে। Android সিস্টেম সেইসব অ্যাপ্লিকেশন ট্র্যাক করে, যেগুলি কোনও নির্দিষ্ট অ্যাকাউন্ট অ্যাক্সেস করতে পারে।
Android-এর আগের ভার্সনে, যেসব অ্যাপ ব্যবহারকারীর অ্যাকাউন্টের তালিকা ট্র্যাক করতে চাইত,
সেগুলিকে সব অ্যাকাউন্ট সম্পর্কে আপডেট পেতে হত, যার মধ্যে সম্পর্কহীন ধরনের অ্যাকাউন্টও
অন্তর্ভুক্ত ছিল। Android 8.0-এ
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
পদ্ধতি যোগ করা হয়েছে, যার মাধ্যমে অ্যাপ অ্যাকাউন্টের ধরনের তালিকা নির্দিষ্ট করতে পারে
যার জন্য অ্যাকাউন্টে পরিবর্তন সংক্রান্ত তথ্য পাওয়া উচিত।
API সংক্রান্ত পরিবর্তন
কোন অ্যাপ অ্যাকাউন্ট দেখতে পাবে তা ম্যানেজ করার জন্য প্রমাণকারীকে সাহায্য করতে AccountManager ছয়টি নতুন পদ্ধতি প্রদান করে:
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 লেভেল ২৬) দুটি বিশেষ প্যাকেজের নামের মান নিয়ে আসে যা
setAccountVisibility(android.accounts.Account, java.lang.String, int)
পদ্ধতি ব্যবহার করে সেট না করা অ্যাপ্লিকেশনের জন্য দৃশ্যমানতা লেভেল নির্দিষ্ট করে। PACKAGE_NAME_KEY_LEGACY_VISIBLE
দৃশ্যমানতা ভ্যালু সেইসব অ্যাপে প্রয়োগ করা হয় যেগুলির
GET_ACCOUNTS
অনুমতি আছে এবং Android 8.0-এর আগের Android ভার্সন টার্গেট করে অথবা
যেগুলির স্বাক্ষর যেকোনও Android ভার্সন টার্গেট করা যাচাইকারীর সাথে মেলে।
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
এমন অ্যাপের জন্য ডিফল্ট দৃশ্যমানতা ভ্যালু প্রদান করে
যেগুলি আগে সেট করা হয়নি এবং যেগুলির জন্য
PACKAGE_NAME_KEY_LEGACY_VISIBLE প্রযোজ্য
নয়।
নতুন অ্যাকাউন্ট অ্যাক্সেস ও ডিসকভারি API সম্পর্কে আরও জানতে, AccountManager এবং
OnAccountsUpdateListener-এর রেফারেন্স দেখুন।
পরীক্ষা করা
ইন্সট্রুমেন্টেশন টেস্টিং
Android 8.0 (API লেভেল ২৬) আপনার অ্যাপের ইন্সট্রুমেন্টেশন টেস্টের জন্য নিম্নলিখিত অতিরিক্ত সহায়তা প্রদান করে।
ডিফল্ট নয় এমন অ্যাপ প্রসেসের ক্ষেত্রে রান করুন
আপনি এখন নির্দিষ্ট করতে পারেন যে একটি নির্দিষ্ট ইন্সট্রুমেন্টেশন টেস্ট আপনার অ্যাপের ডিফল্ট প্রসেসের বাইরে একটি প্রসেসের বিরুদ্ধে চালানো উচিত। আপনার অ্যাপে যদি একাধিক অ্যাক্টিভিটি থাকে যা বিভিন্ন প্রসেসে চলে, তাহলে এই কনফিগারেশনটি উপযোগী।
ডিফল্ট নয় এমন প্রসেস ইন্সট্রুমেন্টেশন নির্ধারণ করতে, আপনার ম্যানিফেস্ট ফাইলে
নেভিগেট করুন, তারপর পছন্দসই
<instrumentation> এলিমেন্টে যান। android:targetProcess অ্যাট্রিবিউট যোগ করুন এবং
নিম্নলিখিতগুলির মধ্যে কোনও একটিতে এর ভ্যালু সেট করুন:
- কোনও নির্দিষ্ট প্রসেসের নাম।
- কমা দিয়ে আলাদা করা প্রসেসের নামের তালিকা।
- একটি ওয়াইল্ডকার্ড (
"*"), যাandroid:targetPackageঅ্যাট্রিবিউটে নির্দিষ্ট করা প্যাকেজে কোড এক্সিকিউট করে এমন যেকোনও লঞ্চ করা প্রসেসের বিরুদ্ধে ইনস্ট্রুমেন্টেশন রান করার অনুমতি দেয়।
আপনার ইন্সট্রুমেন্টেশন টেস্ট চলাকালীন, getProcessName() কল করে আপনি চেক করতে পারবেন যে এটি কোন প্রসেস
টেস্ট করছে।
পরীক্ষা চলাকালীন ফলাফল রিপোর্ট করা
আপনি এখন আপনার ইন্সট্রুমেন্টেশন টেস্ট চলাকালীন ফলাফল রিপোর্ট করতে পারেন,
পরে করার পরিবর্তে, addResults() কল করে।
পরীক্ষার জন্য মক ইনটেন্ট
আপনার অ্যাপের অ্যাক্টিভিটির জন্য আইসোলেটেড, স্বতন্ত্র UI টেস্ট তৈরি করা আরও সহজ করতে, Android 8.0 (API লেভেল ২৬)
onStartActivity() পদ্ধতি চালু করেছে। আপনার টেস্ট ক্লাস যে নির্দিষ্ট ইনটেন্টকে কল করে, সেটি ম্যানেজ করার জন্য আপনি
Instrumentation.ActivityMonitor ক্লাসের কাস্টম সাবক্লাসে এই পদ্ধতি ওভাররাইড করেন।
আপনার টেস্ট ক্লাস ইনটেন্টকে ইনভোক করলে, পদ্ধতিটি ইনটেন্টকে নিজে এক্সিকিউট করার পরিবর্তে
Instrumentation.ActivityResult অবজেক্ট স্টাব রিটার্ন করে। আপনার টেস্টে এই মক ইনটেন্ট লজিক ব্যবহার করে, আপনি ফোকাস করতে পারবেন
যে কীভাবে আপনার অ্যাক্টিভিটি প্রস্তুত করে এবং ইনটেন্ট ম্যানেজ করে যা আপনি অন্য অ্যাক্টিভিটি বা
সম্পূর্ণ ভিন্ন অ্যাপে পাস করেন।
রানটাইম ও টুল
প্ল্যাটফর্ম অপ্টিমাইজেশন
Android 8.0 (API লেভেল ২৬) প্ল্যাটফর্মে রানটাইম এবং অন্যান্য অপ্টিমাইজেশন নিয়ে আসে যার ফলে পারফর্ম্যান্সে অনেক উন্নতি হয়। এই অপ্টিমাইজেশনের মধ্যে কনকারেন্ট-কম্প্যাকশন গার্বেজ কালেকশন, মেমরির আরও দক্ষ ব্যবহার এবং কোড লোকালিটি অন্তর্ভুক্ত।
এই অপ্টিমাইজেশনের ফলে বুট করার সময় কম লাগে এবং OS ও অ্যাপ, দুটিরই পারফর্ম্যান্স উন্নত হয়।
আপডেট করা জাভা ভাষা সংক্রান্ত সহায়তা
Android 8.0 (API লেভেল ২৬) বেশ কিছু অতিরিক্ত OpenJDK Java API-এর জন্য সহায়তা যোগ করে:
- OpenJDK 8 থেকে
java.time। - OpenJDK 7 থেকে
java.nio.fileএবংjava.lang.invoke।
এই নতুন যোগ করা প্যাকেজের মধ্যে ক্লাস ও পদ্ধতি সম্পর্কে আরও জানতে, API রেফারেন্স ডকুমেন্টেশন দেখুন।
আপনি Android Studio-তে Java 8 ল্যাঙ্গুয়েজ ফিচার ব্যবহার করতে চাইলে, লেটেস্ট প্রিভিউ ভার্সন ডাউনলোড করতে হবে।
ICU4J Android ফ্রেমওয়ার্ক API আপডেট করা হয়েছে
Android 8.0 (API লেভেল ২৬)
ICU4J Android ফ্রেমওয়ার্ক
API—যা ICU4J API-এর সাবসেট—অ্যাপ ডেভেলপারদের জন্য
android.icu প্যাকেজের অধীনে ব্যবহার করার জন্য এক্সটেন্ড করে। এইসব API ডিভাইসে উপস্থিত লোকালাইজেশন ডেটা ব্যবহার করে, তাই আপনি APK-তে ICU4J লাইব্রেরি কম্পাইল না করে APK ফুটপ্রিন্ট কমাতে পারেন।
টেবিল ১. Android-এ ব্যবহৃত ICU, CLDR এবং Unicode ভার্সন।
| Android API লেভেল | ICU ভার্সন | CLDR ভার্সন | Unicode ভার্সন |
|---|---|---|---|
| Android 7.0 (API লেভেল ২৪), Android 7.1 (API লেভেল ২৫) | ৫৬ | ২৮ | ৮.০ |
| Android 8.0 (API লেভেল ২৬) | ৫৮.২ | 30.0.3 | ৯.০ |
ICU4J সহায়তা সহ Android-এ আন্তর্জাতিকীকরণ সম্পর্কে আরও তথ্যের জন্য, Android-এ আন্তর্জাতিকীকরণ দেখুন।
Android Enterprise
Android 8.0 (API লেভেল ২৬) ভার্সনে চলা ডিভাইসের জন্য নতুন এন্টারপ্রাইজ ফিচার ও API নিয়ে আসা হয়েছে। হাইলাইটের মধ্যে এগুলি অন্তর্ভুক্ত:
- সম্পূর্ণভাবে ম্যানেজ করা ডিভাইসে অফিস প্রোফাইল থাকলে, এন্টারপ্রাইজগুলি ব্যক্তিগত ডেটা থেকে অফিসের ডেটা আলাদা করতে পারে, পাশাপাশি দুটিই ম্যানেজ করতে পারে।
- API ডেলিগেশন ডিভাইস মালিক এবং প্রোফাইল মালিকদের অন্যান্য অ্যাপ্লিকেশনে অ্যাপ ম্যানেজমেন্ট অ্যাসাইন করার অনুমতি দেয়।
- প্রভিশনিং ফ্লোতে ব্যবহারকারীর অভিজ্ঞতা উন্নত করা (নতুন কাস্টমাইজেশন বিকল্প সহ) সেট-আপের সময় কমায়।
- ব্লুটুথ, ওয়াই-ফাই, ব্যাক-আপ ও নিরাপত্তার উপর নতুন কন্ট্রোল, এন্টারপ্রাইজকে আরও বেশি ডিভাইস ম্যানেজ করতে দেয়। নেটওয়ার্ক অ্যাক্টিভিটি লগিং এন্টারপ্রাইজকে সমস্যা খুঁজে পেতে সাহায্য করে।
এইসব এবং অন্যান্য নতুন Android Enterprise API ও ফিচার সম্পর্কে আরও জানতে, Android in the Enterprise দেখুন।