অ্যান্ড্রয়েড 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()
প্রতিটি উদাহরণের জন্য মেট্রিক্স আলাদাভাবে সংগ্রহ করা হয় এবং দৃষ্টান্তের জীবনকাল ধরে থাকে। যদি কোন মেট্রিক্স উপলব্ধ না হয় তবে পদ্ধতিটি শূন্য প্রদান করে। প্রত্যাবর্তিত প্রকৃত মেট্রিক্স ক্লাসের উপর নির্ভর করে।
মিডিয়া প্লেয়ার
Android 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
অবজেক্ট পরিবর্তিত হলে আপনার অ্যাপকে বিজ্ঞপ্তি দেয়। এটি করার জন্য, AudioManager.AudioPlaybackCallback
একটি উদাহরণে পাস করে registerAudioPlaybackCallback()
কল করুন। AudioManager.AudioPlaybackCallback
ক্লাসে onPlaybackConfigChanged()
পদ্ধতি রয়েছে, যা অডিও প্লেব্যাক কনফিগারেশন পরিবর্তিত হলে সিস্টেমটি কল করে।
সংযোগ
ওয়াই-ফাই সচেতন
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) ওয়াই-ফাই সচেতনদের জন্য সমর্থন যুক্ত করে, যা প্রতিবেশী সচেতনতা নেটওয়ার্কিং (এনএএন) স্পেসিফিকেশনের উপর ভিত্তি করে। উপযুক্ত Wi-Fi সচেতন হার্ডওয়্যার সহ ডিভাইসগুলিতে, অ্যাপ্লিকেশন এবং কাছাকাছি ডিভাইসগুলি কোনও ইন্টারনেট অ্যাক্সেস পয়েন্ট ছাড়াই Wi-Fi এর মাধ্যমে আবিষ্কার এবং যোগাযোগ করতে পারে। আমরা যত তাড়াতাড়ি সম্ভব ডিভাইসে ওয়াই-ফাই সচেতন প্রযুক্তি আনতে আমাদের হার্ডওয়্যার অংশীদারদের সাথে কাজ করছি। আপনার অ্যাপ্লিকেশনটিতে কীভাবে ওয়াই-ফাই সচেতন হওয়া উচিত সে সম্পর্কিত তথ্যের জন্য, ওয়াই-ফাই সচেতন দেখুন।
ব্লুটুথ
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) নিম্নলিখিত বৈশিষ্ট্যগুলি যুক্ত করে প্ল্যাটফর্মের ব্লুটুথ সমর্থনকে সমৃদ্ধ করে:
- এভিআরসিপি 1.4 স্ট্যান্ডার্ডের জন্য সমর্থন, যা গানের লাইব্রেরি ব্রাউজিং সক্ষম করে।
- ব্লুটুথ লো-এনার্জি (বিএলই) 5.0 স্ট্যান্ডার্ডের জন্য সমর্থন।
- ব্লুটুথ স্ট্যাকের মধ্যে সনি এলডিএসি কোডেকের সংহতকরণ।
সঙ্গী ডিভাইস জুড়ি
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) এপিআই সরবরাহ করে যা আপনাকে ব্লুটুথ, বিএলই এবং ওয়াই-ফাইয়ের মাধ্যমে সঙ্গী ডিভাইসের সাথে জুড়ি দেওয়ার চেষ্টা করার সময় জুটির অনুরোধ ডায়ালগটি কাস্টমাইজ করতে দেয়। আরও তথ্যের জন্য, সহচর ডিভাইস জুড়ি দেখুন।
অ্যান্ড্রয়েডে ব্লুটুথ ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ব্লুটুথ গাইড দেখুন। অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) এর জন্য নির্দিষ্ট ব্লুটুথের পরিবর্তনের জন্য, অ্যান্ড্রয়েড 8.0 আচরণ পরিবর্তন পৃষ্ঠার ব্লুটুথ বিভাগটি দেখুন।
শেয়ারিং
স্মার্ট শেয়ারিং
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) ব্যবহারকারীদের ব্যক্তিগতকৃত ভাগ করে নেওয়ার পছন্দগুলি সম্পর্কে শিখেছে এবং প্রতিটি ধরণের সামগ্রীর জন্য আরও ভাল বোঝে যা ভাগ করে নেওয়ার জন্য সঠিক অ্যাপ্লিকেশন। উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী কোনও রসিদটির কোনও ছবি নেয় তবে অ্যান্ড্রয়েড 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
দেখুন।
পাঠ্য শ্রেণিবদ্ধ
সামঞ্জস্যপূর্ণ ডিভাইসে, অ্যাপ্লিকেশনগুলি কোনও স্ট্রিং কোনও পরিচিত শ্রেণিবদ্ধ সত্তা ধরণের সাথে মেলে কিনা এবং প্রস্তাবিত নির্বাচনের বিকল্পগুলি পেতে পারে কিনা তা পরীক্ষা করতে একটি নতুন পাঠ্য শ্রেণিবদ্ধ ব্যবহার করতে পারে। সিস্টেম দ্বারা স্বীকৃত সত্তাগুলির মধ্যে ঠিকানা, ইউআরএল, টেলিফোন নম্বর এবং ইমেল ঠিকানা অন্তর্ভুক্ত রয়েছে। আরও তথ্যের জন্য, TextClassifier
দেখুন।
অ্যাক্সেসযোগ্যতা
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) বিকাশকারীদের জন্য তাদের নিজস্ব অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করে এমন বেশ কয়েকটি নতুন অ্যাক্সেসযোগ্যতা বৈশিষ্ট্য সমর্থন করে:
- অ্যাক্সেসযোগ্যতার ভলিউম সামঞ্জস্য করার জন্য একটি নতুন ভলিউম বিভাগ।
- ইনপুট প্রক্রিয়া হিসাবে ফিঙ্গারপ্রিন্ট অঙ্গভঙ্গি ।
- বক্তৃতা ক্ষমতা থেকে বহুভাষিক পাঠ্য ।
- দ্রুত পছন্দসই অ্যাক্সেসিবিলিটি পরিষেবা অ্যাক্সেস করার জন্য একটি হার্ডওয়্যার-ভিত্তিক অ্যাক্সেসিবিলিটি শর্টকাট ।
- অব্যাহত অঙ্গভঙ্গি , বা স্ট্রোকের প্রোগ্রাম্যাটিক সিকোয়েন্সগুলির জন্য সমর্থন।
- বেশ কয়েকটি সক্ষম অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলির মধ্যে একটিকে অনুরোধ করার জন্য একটি অ্যাক্সেসিবিলিটি বোতাম (কেবলমাত্র ডিভাইসগুলিতে উপলব্ধ যা একটি সফ্টওয়্যার-রেন্ডারড নেভিগেশন অঞ্চল ব্যবহার করে)।
- মানক একতরফা পরিসীমা মান ।
- পাঠ্য পাঠ্য এবং অন-স্ক্রিন পাঠ্য অক্ষরের অবস্থানগুলি সহ আরও সহজেই পাঠ্য প্রক্রিয়াজাতকরণের জন্য বেশ কয়েকটি বৈশিষ্ট্য।
নিরাপত্তা এবং গোপনীয়তা
অনুমতি
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) টেলিফোনি সম্পর্কিত বেশ কয়েকটি নতুন অনুমতি প্রবর্তন করে:
-
ANSWER_PHONE_CALLS
অনুমতিগুলি আপনার অ্যাপ্লিকেশনটিকে আগত ফোন কলগুলিকে প্রোগ্রামগতভাবে উত্তর দেওয়ার অনুমতি দেয়। আপনার অ্যাপ্লিকেশনটিতে আগত ফোন কলটি পরিচালনা করতে, আপনিacceptRingingCall()
পদ্ধতিটি ব্যবহার করতে পারেন। -
READ_PHONE_NUMBERS
অনুমতিগুলি আপনার অ্যাপ্লিকেশনটিকে কোনও ডিভাইসে সঞ্চিত ফোন নম্বরগুলিতে অ্যাক্সেস পঠন মঞ্জুর করে।
এই অনুমতি উভয়ই বিপজ্জনক হিসাবে শ্রেণিবদ্ধ করা হয় এবং উভয়ই PHONE
অনুমতি গোষ্ঠীর অংশ।
নতুন অ্যাকাউন্ট অ্যাক্সেস এবং আবিষ্কার এপিআই
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) অ্যাপ্লিকেশনগুলি কীভাবে ব্যবহারকারী অ্যাকাউন্টগুলিতে অ্যাক্সেস পায় তার বিভিন্ন উন্নতি প্রবর্তন করে। তারা যে অ্যাকাউন্টগুলি পরিচালনা করে তার জন্য, প্রমাণীকরণকারীরা অ্যাকাউন্টগুলি থেকে অ্যাকাউন্টগুলি লুকিয়ে রাখবেন বা কোনও অ্যাপ্লিকেশন থেকে প্রকাশ করতে হবে কিনা তা সিদ্ধান্ত নিতে তাদের নিজস্ব নীতি ব্যবহার করতে পারেন। অ্যান্ড্রয়েড সিস্টেম অ্যাপ্লিকেশনগুলি ট্র্যাক করে যা কোনও নির্দিষ্ট অ্যাকাউন্টে অ্যাক্সেস করতে পারে।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, যে অ্যাপ্লিকেশনগুলি ব্যবহারকারী অ্যাকাউন্টগুলির তালিকা ট্র্যাক করতে চেয়েছিল সেগুলি সম্পর্কিত সম্পর্কিত ধরণের অ্যাকাউন্ট সহ সমস্ত অ্যাকাউন্ট সম্পর্কে আপডেট পেতে হয়েছিল। অ্যান্ড্রয়েড 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
শ্রোতা যুক্ত করেছেন। যখনই ডিভাইসে অ্যাকাউন্টগুলির তালিকা পরিবর্তন হয় তখন সিস্টেমটি এই শ্রোতাকে কল করে।
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) অ্যাপ্লিকেশনগুলির জন্য দৃশ্যমানতার স্তরগুলি নির্দিষ্ট করার জন্য দুটি বিশেষ প্যাকেজ নামের মানগুলি প্রবর্তন করে যা setAccountVisibility(android.accounts.Account, java.lang.String, int)
পদ্ধতিটি ব্যবহার করে সেট করা হয়নি। PACKAGE_NAME_KEY_LEGACY_VISIBLE
দৃশ্যমানতার মানটি এমন অ্যাপ্লিকেশনগুলিতে প্রয়োগ করা হয় যা GET_ACCOUNTS
অনুমতি রয়েছে এবং অ্যান্ড্রয়েডের কম কম অ্যান্ড্রয়েড 8.0 এর চেয়ে কম সংস্করণগুলির লক্ষ্য সংস্করণগুলি বা যার স্বাক্ষরগুলি কোনও অ্যান্ড্রয়েড সংস্করণকে লক্ষ্য করে প্রমাণীকরণকারীর সাথে মেলে। PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
অ্যাপ্লিকেশনগুলির জন্য একটি ডিফল্ট দৃশ্যমানতার মান সরবরাহ করে যা আগে সেট করা হয়নি এবং যার জন্য PACKAGE_NAME_KEY_LEGACY_VISIBLE
প্রযোজ্য নয়।
নতুন অ্যাকাউন্ট অ্যাক্সেস এবং আবিষ্কারের এপিআই সম্পর্কে আরও তথ্যের জন্য, AccountManager
এবং OnAccountsUpdateListener
জন্য রেফারেন্সটি দেখুন।
টেস্টিং
উপকরণ পরীক্ষা
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) আপনার অ্যাপের উপকরণ পরীক্ষার জন্য নিম্নলিখিত অতিরিক্ত সহায়তার টুকরো সরবরাহ করে।
নন-ডিফল্ট অ্যাপ প্রক্রিয়াগুলির বিরুদ্ধে চালান
আপনি এখন নির্দিষ্ট করতে পারেন যে একটি নির্দিষ্ট উপকরণ পরীক্ষা আপনার অ্যাপের ডিফল্ট প্রক্রিয়াটির বাইরে কোনও প্রক্রিয়াটির বিপরীতে চলতে হবে। এই কনফিগারেশনটি কার্যকর যদি আপনার অ্যাপ্লিকেশনটিতে একাধিক ক্রিয়াকলাপ থাকে যা বিভিন্ন প্রক্রিয়াতে চালিত হয়।
অ-ডিফল্ট প্রক্রিয়া উপকরণ সংজ্ঞায়িত করতে, আপনার ম্যানিফেস্ট ফাইলে নেভিগেট করুন, তারপরে কাঙ্ক্ষিত <instrumentation>
উপাদানটিতে। android:targetProcess
অ্যাট্রিবিউট, এবং এর মান নিম্নলিখিতগুলির মধ্যে একটিতে সেট করুন:
- একটি নির্দিষ্ট প্রক্রিয়া নাম।
- প্রক্রিয়া নামগুলির একটি কমা-বিচ্ছিন্ন তালিকা।
- একটি ওয়াইল্ডকার্ড (
"*"
), যাandroid:targetPackage
অ্যাট্রিবিউটে নির্দিষ্ট প্যাকেজে কোড কার্যকর করে এমন কোনও চালু হওয়া প্রক্রিয়াটির বিপরীতে উপকরণটি চালানোর অনুমতি দেয়।
আপনার ইনস্ট্রুমেন্টেশন পরীক্ষাটি কার্যকর করার সময়, আপনি getProcessName()
কল করে কোন প্রক্রিয়াটি পরীক্ষা করছেন তা পরীক্ষা করতে পারেন।
একটি পরীক্ষার সময় ফলাফলের প্রতিবেদন করুন
আপনার ইনস্ট্রুমেন্টেশন পরীক্ষাটি কার্যকর হওয়ার সময় আপনি এখন ফলাফলগুলি প্রতিবেদন করতে পারেন, পরে পরিবর্তে, addResults()
কল করে।
পরীক্ষার জন্য মক ইনটেন্টস
আপনার অ্যাপের ক্রিয়াকলাপগুলির জন্য বিচ্ছিন্ন, স্বতন্ত্র ইউআই পরীক্ষা তৈরি করা আরও সহজ করার জন্য, অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) onStartActivity()
পদ্ধতিটি প্রবর্তন করে। আপনি এই পদ্ধতিটি Instrumentation.ActivityMonitor
একটি কাস্টম সাবক্লাসে ওভাররাইড করেন your আপনার পরীক্ষার শ্রেণি আহ্বান করে এমন একটি নির্দিষ্ট অভিপ্রায় পরিচালনা করতে
যখন আপনার পরীক্ষার শ্রেণিটি অভিপ্রায়টি আহ্বান করে, পদ্ধতিটি একটি স্টাব Instrumentation.ActivityResult
দেয় even আপনার পরীক্ষাগুলিতে এই মক ইনটেন্ট লজিকটি ব্যবহার করে, আপনি কীভাবে আপনার ক্রিয়াকলাপটি প্রস্তুত করে এবং আপনি অন্য কোনও ক্রিয়াকলাপে বা সম্পূর্ণ ভিন্ন অ্যাপ্লিকেশনটিতে পাস করার অভিপ্রায়টি পরিচালনা করেন সেদিকে মনোনিবেশ করতে পারেন।
রানটাইম এবং সরঞ্জাম
প্ল্যাটফর্ম অপ্টিমাইজেশন
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) প্ল্যাটফর্মে রানটাইম এবং অন্যান্য অপ্টিমাইজেশন নিয়ে আসে যার ফলে বেশ কয়েকটি পারফরম্যান্সের উন্নতি ঘটে। এই অপ্টিমাইজেশনের মধ্যে অন্তর্ভুক্ত-সংযোগ আবর্জনা সংগ্রহ, মেমরির আরও দক্ষ ব্যবহার এবং কোড লোকেশন অন্তর্ভুক্ত।
এই অপ্টিমাইজেশনের ফলে দ্রুত বুটের সময়গুলি, পাশাপাশি ওএস এবং অ্যাপ্লিকেশন উভয় ক্ষেত্রেই আরও ভাল পারফরম্যান্স হয়।
জাভা ভাষা সমর্থন আপডেট হয়েছে
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) বেশ কয়েকটি অতিরিক্ত ওপেনজেডিকে জাভা এপিআইগুলির জন্য সমর্থন যুক্ত করে:
-
java.time
ওপেনজেডকে 8 থেকে। -
java.nio.file
এবংjava.lang.invoke
ওপেনজেডকে 7 থেকে।
এই সদ্য যুক্ত হওয়া প্যাকেজগুলির মধ্যে ক্লাস এবং পদ্ধতি সম্পর্কে আরও জানতে, এপিআই রেফারেন্স ডকুমেন্টেশন দেখুন।
আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে জাভা 8 ভাষার বৈশিষ্ট্যগুলি ব্যবহার করতে চান তবে আপনার সর্বশেষ পূর্বরূপ সংস্করণটি ডাউনলোড করা উচিত।
আপডেট করা আইসিইউ 4 জে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এপিআই
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) আইসিইউ 4 জে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এপিআইগুলি প্রসারিত করে - যা আইসিইউ 4 জে এপিআইএসের একটি উপসেট - অ্যাপ্লিকেশন বিকাশকারীদের android.icu
প্যাকেজের অধীনে ব্যবহার করার জন্য। এই এপিআইগুলি ডিভাইসে উপস্থিত স্থানীয়করণ ডেটা ব্যবহার করে, যাতে আপনি আপনার এপিকে আইসিইউ 4 জে লাইব্রেরিগুলি সংকলন না করে আপনার এপিকে পদচিহ্ন হ্রাস করতে পারেন।
অ্যান্ড্রয়েড এপিআই স্তর | আইসিইউ সংস্করণ | সিএলডিআর সংস্করণ | ইউনিকোড সংস্করণ |
---|---|---|---|
অ্যান্ড্রয়েড 7.0 (এপিআই স্তর 24), অ্যান্ড্রয়েড 7.1 (এপিআই স্তর 25) | 56 | 28 | ৮.০ |
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) | 58.2 | 30.0.3 | 9.0 |
আইসিইউ 4 জে সমর্থন সহ অ্যান্ড্রয়েডে আন্তর্জাতিকীকরণ সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েডে আন্তর্জাতিকীকরণ দেখুন।
অ্যান্ড্রয়েড এন্টারপ্রাইজ
অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) চলমান ডিভাইসগুলির জন্য নতুন এন্টারপ্রাইজ বৈশিষ্ট্য এবং এপিআই চালু করা হয়েছে। হাইলাইট নিম্নলিখিত অন্তর্ভুক্ত:
- সম্পূর্ণরূপে পরিচালিত ডিভাইসে কাজের প্রোফাইলগুলি উভয়কেই পরিচালনা করার সময় এন্টারপ্রাইজগুলিকে ব্যক্তিগত ডেটা থেকে আলাদা করে কাজ করতে দেয়।
- এপিআই প্রতিনিধি দলটি ডিভাইস মালিকদের এবং প্রোফাইল মালিকদের অন্যান্য অ্যাপ্লিকেশনগুলিতে অ্যাপ্লিকেশন পরিচালনা করার অনুমতি দেয়।
- প্রভিশন প্রবাহে ব্যবহারকারীর অভিজ্ঞতার উন্নতি (নতুন কাস্টমাইজেশন বিকল্প সহ) সেটআপের সময় হ্রাস করে।
- ব্লুটুথ, ওয়াই-ফাই, ব্যাকআপ এবং সুরক্ষার উপর নতুন নিয়ন্ত্রণগুলি উদ্যোগগুলি আরও বেশি ডিভাইস পরিচালনা করতে দেয়। নেটওয়ার্ক ক্রিয়াকলাপ লগিং উদ্যোগগুলি সমস্যাগুলি ট্র্যাক করতে সহায়তা করে।
এগুলি এবং অন্যান্য নতুন অ্যান্ড্রয়েড এন্টারপ্রাইজ এপিআই এবং বৈশিষ্ট্যগুলি সম্পর্কে আরও জানতে, এন্টারপ্রাইজে অ্যান্ড্রয়েড দেখুন।