Android 5.0 API

API লেভেল: ২১

Android 5.0 (LOLLIPOP) ব্যবহারকারী ও অ্যাপ ডেভেলপারদের জন্য নতুন ফিচার অফার করে। এই ডকুমেন্টটি সবচেয়ে উল্লেখযোগ্য নতুন API-এর একটি ভূমিকা প্রদান করে।

আপনার কোনও প্রকাশিত অ্যাপ থাকলে, Android 5.0-এর আচরণ সংক্রান্ত পরিবর্তন চেক করে দেখতে ভুলবেন না যা আপনার অ্যাপে বিবেচনা করতে হবে। এই আচরণ সংক্রান্ত পরিবর্তন Android 5.0 ডিভাইসে আপনার অ্যাপকে প্রভাবিত করতে পারে, এমনকি আপনি নতুন API ব্যবহার না করলে বা নতুন কার্যকারিতা টার্গেট না করলেও।

নতুন প্ল্যাটফর্ম ফিচারের হাই-লেভেল ভিউ পেতে, এর পরিবর্তে Android Lollipop হাইলাইট দেখুন।

ডেভেলপ করা শুরু করুন

Android 5.0-এর জন্য অ্যাপ তৈরি শুরু করতে, আপনাকে প্রথমে Android SDK ডাউনলোড করতে হবে। তারপরে, Android 5.0 SDK প্ল্যাটফর্ম এবং সিস্টেম ইমেজ ডাউনলোড করতে SDK ম্যানেজার ব্যবহার করুন।

আপনার টার্গেট API লেভেল আপডেট করা

Android 5.0 ভার্সনে চলে এমন ডিভাইসের জন্য আপনার অ্যাপ আরও ভালোভাবে অপ্টিমাইজ করতে, আপনার targetSdkVersion-কে "21" হিসেবে সেট করুন, Android 5.0 সিস্টেম ইমেজে আপনার অ্যাপ ইনস্টল করুন, এটি পরীক্ষা করুন, তারপর এই পরিবর্তন সহ আপডেট করা অ্যাপ প্রকাশ করুন।

আপনার কোডে এমন কন্ডিশন যোগ করে Android 5.0 API ব্যবহার করতে পারবেন যা আপনার minSdkVersion-এ কাজ করে না এমন API এক্সিকিউট করার আগে সিস্টেম API লেভেল চেক করে এবং এর পাশাপাশি পুরনো ভার্সনেও কাজ করে। ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখা সম্পর্কে আরও জানতে, আলাদা প্ল্যাটফর্ম ভার্সন সাপোর্ট করা নিবন্ধটি পড়ুন।

API লেভেল কীভাবে কাজ করে সেই সম্পর্কে আরও জানতে, API লেভেল কী? নিবন্ধটি পড়ুন।

আচরণে গুরুত্বপূর্ণ পরিবর্তন

আপনি আগে Android-এর জন্য কোনও অ্যাপ প্রকাশ করে থাকলে, মনে রাখবেন যে Android 5.0-তে হওয়া পরিবর্তনের ফলে আপনার অ্যাপ প্রভাবিত হতে পারে।

সম্পূর্ণ তথ্য পেতে Android 5.0-তে হওয়া পরিবর্তন দেখুন।

ইউজার ইন্টারফেস

মেটেরিয়াল ডিজাইন সংক্রান্ত সহায়তা

Android 5.0, Android-এর নতুন ম্যাটেরিয়াল ডিজাইন স্টাইলের জন্য সহায়তা যোগ করে। আপনি মেটেরিয়াল ডিজাইন সহ এমন অ্যাপ তৈরি করতে পারবেন যা দেখতে ডায়নামিক এবং UI এলিমেন্ট ট্রানজিশন আছে যা ব্যবহারকারীদের কাছে স্বাভাবিক মনে হয়। এই সহায়তার মধ্যে রয়েছে:

  • মেটেরিয়াল থিম
  • ছায়া দেখা
  • RecyclerView উইজেট
  • ড্রয়েবল অ্যানিমেশন ও স্টাইলিং এফেক্ট
  • মেটেরিয়াল ডিজাইন অ্যানিমেশন ও অ্যাক্টিভিটি ট্রানজিশন এফেক্ট
  • ভিউয়ের অবস্থার উপর ভিত্তি করে ভিউ প্রপার্টির জন্য অ্যানিমেটর
  • আপনার কন্ট্রোল করা কালার প্যালেট সহ কাস্টমাইজ করা যায় এমন UI উইজেট ও অ্যাপ বার
  • XML ভেক্টর গ্রাফিক্সের উপর ভিত্তি করে অ্যানিমেটেড ও নন-অ্যানিমেটেড ড্রয়েবল

আপনার অ্যাপে মেটেরিয়াল ডিজাইন ফাংশনালিটি যোগ করা সম্পর্কে আরও জানতে, মেটেরিয়াল ডিজাইন দেখুন।

সাম্প্রতিক স্ক্রিনে কনকারেন্ট ডকুমেন্ট ও অ্যাক্টিভিটি

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

সিস্টেম যাতে আপনার অ্যাক্টিভিটিকে নতুন টাস্ক হিসেবে গণ্য করে, সেই জন্য লজিক্যাল ব্রেক যোগ করতে, startActivity()-এর সাথে অ্যাক্টিভিটি লঞ্চ করার সময় FLAG_ACTIVITY_NEW_DOCUMENT ব্যবহার করুন। এছাড়াও, আপনার ম্যানিফেস্টে <activity> এলিমেন্টের documentLaunchMode অ্যাট্রিবিউটকে "intoExisting" বা "always" হিসেবে সেট করে এই আচরণ পেতে পারেন।

'সাম্প্রতিক' স্ক্রিন যাতে বেশি আইটেম দিয়ে ভর্তি না হয়ে যায়, সেই জন্য আপনার অ্যাপ থেকে সর্বাধিক কতগুলি টাস্ক ওই স্ক্রিনে দেখানো যাবে তা সেট করতে পারবেন। এটি করতে, android:maxRecents অ্যাট্রিবিউট <application> সেট করুন। বর্তমানে সর্বাধিক ৫০টি টাস্ক প্রতি ব্যবহারকারী (কম RAM ডিভাইসের জন্য ২৫টি) নির্দিষ্ট করা যেতে পারে।

রিবুট করার পরেও সাম্প্রতিক স্ক্রিনে থাকা টাস্ক যাতে থেকে যায়, সেই জন্য সেট করা যেতে পারে। পারসিস্টেন্স আচরণ কন্ট্রোল করতে, android:persistableMode অ্যাট্রিবিউট ব্যবহার করুন। এছাড়াও, আপনি setTaskDescription() মেথড কল করে, সাম্প্রতিক স্ক্রিনে কোনও অ্যাক্টিভিটির ভিজ্যুয়াল প্রপার্টি পরিবর্তন করতে পারেন, যেমন অ্যাক্টিভিটির রঙ, লেবেল ও আইকন।

WebView আপডেট

Android 5.0, Chromium M37-এ WebView ইমপ্লিমেন্টেশন আপডেট করে, এর ফলে নিরাপত্তা ও স্থিতিশীলতা সংক্রান্ত উন্নতি হয়, পাশাপাশি সমস্যার সমাধানও হয়। Android 5.0-এ WebView চলা কোনও ব্রাউজারের ডিফল্ট ইউজার-এজেন্ট স্ট্রিং ভার্সন নম্বর হিসেবে 37.0.0.0 অন্তর্ভুক্ত করার জন্য আপডেট করা হয়েছে।

এই রিলিজে PermissionRequest ক্লাস যোগ করা হয়েছে, যা আপনার অ্যাপকে WebView অনুমতি প্রদান করতে দেয়। এর মাধ্যমে ক্যামেরা ও মাইক্রোফোনের মতো সুরক্ষিত রিসোর্স, getUserMedia()-এর মতো ওয়েব API অ্যাক্সেস করা যায়। WebView-কে অনুমতি দেওয়ার জন্য আপনার অ্যাপে এইসব রিসোর্সের জন্য উপযুক্ত Android অনুমতি থাকতে হবে।

নতুন onShowFileChooser() পদ্ধতির সাহায্যে, আপনি এখন WebView-এ ইনপুট ফর্ম ফিল্ড ব্যবহার করতে পারবেন এবং Android ডিভাইস থেকে ছবি ও ফাইল বেছে নিতে ফাইল চুজারের সুবিধা নিতে পারবেন।

এছাড়াও, এই রিলিজের মাধ্যমে WebAudio, WebGL এবং WebRTC ওপেন স্ট্যান্ডার্ডের সুবিধা পাওয়া যাবে। এই রিলিজে অন্তর্ভুক্ত নতুন ফিচার সম্পর্কে আরও জানতে, Android-এর জন্য WebView দেখুন।

স্ক্রিন ক্যাপচার ও শেয়ার করা

Android 5.0 আপনাকে নতুন android.media.projection API-এর মাধ্যমে আপনার অ্যাপে স্ক্রিন ক্যাপচার ও স্ক্রিন শেয়ার করার সুবিধা যোগ করতে দেয়। এই কার্যকারিতা সহায়ক, যেমন, আপনি যদি ভিডিও কনফারেন্সিং অ্যাপে স্ক্রিন শেয়ারিং চালু করতে চান।

নতুন createVirtualDisplay() পদ্ধতি আপনার অ্যাপকে মূল স্ক্রিনের কন্টেন্ট (ডিফল্ট ডিসপ্লে) একটি Surface অবজেক্টে ক্যাপচার করার অনুমতি দেয়, যা আপনার অ্যাপ তারপর নেটওয়ার্ক জুড়ে পাঠাতে পারে। API শুধুমাত্র সুরক্ষিত নয় এমন স্ক্রিন কন্টেন্ট ক্যাপচার করার অনুমতি দেয়, সিস্টেম অডিও নয়। স্ক্রিন ক্যাপচার শুরু করতে, আপনার অ্যাপকে প্রথমে Intent createScreenCaptureIntent() পদ্ধতির মাধ্যমে পাওয়া স্ক্রিন ক্যাপচার ডায়ালগ ব্যবহার করে ব্যবহারকারীর অনুমতি চেয়ে নিতে হবে।

নতুন API কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ পেতে, স্যাম্পেল প্রোজেক্টে MediaProjectionDemo ক্লাস দেখুন।

বিজ্ঞপ্তি

লক স্ক্রীন বিজ্ঞপ্তিগুলি

Android 5.0-এর লক স্ক্রিনে বিজ্ঞপ্তি দেখানোর ক্ষমতা আছে। নিরাপদ লক স্ক্রিনে সংবেদনশীল বিজ্ঞপ্তি কন্টেন্ট দেখানোর অনুমতি দেওয়া হবে কিনা তা ব্যবহারকারীরা সেটিংস থেকে বেছে নিতে পারবেন।

নিরাপদ লক স্ক্রিনের উপরে আপনার অ্যাপের বিজ্ঞপ্তি দেখানো হলে, সেখানে কতটা বিস্তারিত তথ্য দেখা যাবে তা অ্যাপ নিয়ন্ত্রণ করতে পারে। দৃশ্যমানতার লেভেল কন্ট্রোল করতে, কল করুন setVisibility() এবং এইসব ভ্যালুর মধ্যে একটি নির্দিষ্ট করুন:

  • VISIBILITY_PRIVATE: বিজ্ঞপ্তির আইকনের মতো প্রাথমিক তথ্য দেখায়, কিন্তু বিজ্ঞপ্তির সম্পূর্ণ কন্টেন্ট লুকিয়ে রাখে।
  • VISIBILITY_PUBLIC: বিজ্ঞপ্তির সম্পূর্ণ কন্টেন্ট দেখায়।
  • VISIBILITY_SECRET: বিজ্ঞপ্তির আইকন সহ কিছুই দেখাচ্ছে না।

দৃশ্যমানতার লেভেল VISIBILITY_PRIVATEহলে, আপনি বিজ্ঞপ্তির কন্টেন্টের একটি এডিট করা ভার্সনও প্রদান করতে পারেন যা ব্যক্তিগত বিবরণ লুকিয়ে রাখে। যেমন, কোনও এসএমএস অ্যাপ একটি বিজ্ঞপ্তি দেখাতে পারে যাতে লেখা থাকে, "আপনি ৩টি নতুন টেক্সট মেসেজ পেয়েছেন" কিন্তু মেসেজের কন্টেন্ট ও প্রেরককে লুকিয়ে রাখে। এই বিকল্প বিজ্ঞপ্তি প্রদান করতে, প্রথমে Notification.Builder ব্যবহার করে পরিবর্ত বিজ্ঞপ্তি তৈরি করুন। আপনি প্রাইভেট বিজ্ঞপ্তি অবজেক্ট তৈরি করলে, সেটির সাথে setPublicVersion() পদ্ধতির মাধ্যমে পরিবর্ত বিজ্ঞপ্তি অ্যাটাচ করুন।

বিজ্ঞপ্তির মেটাডেটা

Android 5.0 আপনার অ্যাপ বিজ্ঞপ্তি সম্পর্কিত মেটাডেটা ব্যবহার করে আরও বুদ্ধিদীপ্তভাবে বিজ্ঞপ্তি সাজায়। মেটাডেটা সেট করতে, বিজ্ঞপ্তি তৈরি করার সময় Notification.Builder-এ নিচে উল্লেখ করা পদ্ধতিগুলি কল করুন:

  • setCategory(): ডিভাইস অগ্রাধিকার মোডে থাকলে, আপনার অ্যাপের বিজ্ঞপ্তি কীভাবে ম্যানেজ করতে হবে তা সিস্টেমকে জানায় (যেমন, কোনও বিজ্ঞপ্তি যদি ইনকামিং কল, ইনস্ট্যান্ট মেসেজ বা অ্যালার্ম হয়)।
  • setPriority(): সাধারণ বিজ্ঞপ্তির তুলনায় বিজ্ঞপ্তিটিকে বেশি বা কম গুরুত্বপূর্ণ হিসেবে চিহ্নিত করে। প্রয়োরিটি ফিল্ড PRIORITY_MAX বা PRIORITY_HIGH হিসেবে সেট করা বিজ্ঞপ্তিগুলি ছোট ফ্লোটিং উইন্ডোতে দেখা যায়, যদি বিজ্ঞপ্তিতে সাউন্ড বা ভাইব্রেশনও থাকে।
  • addPerson(): আপনাকে এমন এক বা একাধিক ব্যক্তিকে যোগ করতে দেয় যারা বিজ্ঞপ্তির সাথে প্রাসঙ্গিক। আপনার অ্যাপ এটি ব্যবহার করে সিস্টেমকে জানাতে পারে যে নির্দিষ্ট লোকজনের থেকে পাওয়া বিজ্ঞপ্তিগুলিকে একসাথে গ্রুপ করা উচিত অথবা এইসব লোকজনের থেকে পাওয়া বিজ্ঞপ্তিগুলিকে আরও গুরুত্বপূর্ণ হিসেবে র‍্যাঙ্ক করা উচিত।

গ্রাফিক্স

OpenGL ES 3.1-এর জন্য সহায়তা

Android 5.0-তে Java ইন্টারফেস এবং OpenGL ES 3.1-এর জন্য নেটিভ সহায়তা যোগ করা হয়েছে। OpenGL ES 3.1-এ প্রদান করা মূল নতুন কার্যকারিতার মধ্যে এগুলি অন্তর্ভুক্ত:

  • কম্পিউট শেডার
  • আলাদা শেডার অবজেক্ট
  • ইনডাইরেক্ট ড্র কমান্ড
  • মাল্টিস্যাম্পেল ও স্টেনসিল টেক্সচার
  • শেডিং ভাষা সংক্রান্ত উন্নতি
  • উন্নত ব্লেন্ড মোড ও ডিবাগিংয়ের জন্য এক্সটেনশন
  • OpenGL ES 2.0 ও 3.0-এর সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি

Android-এ OpenGL ES 3.1-এর জন্য Java ইন্টারফেস GLES31-এর সাথে প্রদান করা হয়। OpenGL ES 3.1 ব্যবহার করার সময়, নিশ্চিত করুন যে আপনি <uses-feature> ট্যাগ এবং android:glEsVersion অ্যাট্রিবিউট সহ আপনার মেনিফেস্ট ফাইলে এটি ঘোষণা করেছেন। যেমন:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

OpenGL ES ব্যবহার করা সম্পর্কে আরও তথ্য পেতে, রানটাইমে ডিভাইসে কাজ করে এমন OpenGL ES ভার্সন কীভাবে চেক করতে হয় তা জানতে, OpenGL ES API গাইড দেখুন।

Android এক্সটেনশন প্যাক

OpenGL ES 3.1 ছাড়াও, এই রিলিজে জাভা ইন্টারফেস ও উন্নত গ্রাফিক্স ফাংশনের জন্য নেটিভ সাপোর্ট সহ একটি এক্সটেনশন প্যাক দেওয়া হয়েছে। Android এইসব এক্সটেনশনকে একটি প্যাকেজ হিসেবে বিবেচনা করে। (If the ANDROID_extension_pack_es31a এক্সটেনশন উপস্থিত থাকলে, আপনার অ্যাপ প্যাকেজে থাকা সব এক্সটেনশন উপস্থিত আছে বলে ধরে নিতে পারে এবং একটি #extension স্টেটমেন্টের মাধ্যমে শেডিং ল্যাঙ্গুয়েজ ফিচার চালু করতে পারে।)

এক্সটেনশন প্যাক এগুলির সাথে কাজ করে:

  • শেডার স্টোরেজ বাফার, ছবি ও অ্যাটমিকের জন্য গ্যারান্টিযুক্ত ফ্র্যাগমেন্ট শেডার সাপোর্ট (OpenGL ES 3.1-এ ফ্র্যাগমেন্ট শেডার সাপোর্ট ঐচ্ছিক।)
  • টেসেলেশন ও জ্যামিতি শেডার
  • ASTC (LDR) টেক্সচার কম্প্রেশন ফর্ম্যাট
  • প্রতিটি স্যাম্পেল অনুযায়ী ইন্টারপোলেশন ও শেডিং
  • ফ্রেম বাফারে প্রতিটি কালার অ্যাটাচমেন্টের জন্য আলাদা আলাদা ব্লেন্ড মোড

এক্সটেনশন প্যাকের জন্য Java ইন্টারফেস GLES31Ext-এর সাথে প্রদান করা হয়। আপনার অ্যাপ ম্যানিফেস্টে, আপনি এটি ঘোষণা করতে পারেন যে আপনার অ্যাপটি শুধুমাত্র সেইসব ডিভাইসে ইনস্টল করা যাবে যেগুলিতে এক্সটেনশন প্যাক কাজ করে। যেমন:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

মিডিয়া

উন্নত ক্যামেরা কেপেবিলিটির জন্য Camera API

Android 5.0, ফটো ক্যাপচার ও ইমেজ প্রসেসিংয়ের জন্য নতুন android.hardware.camera2 API নিয়ে এসেছে। আপনি এখন সিস্টেমের জন্য উপলভ্য ক্যামেরা ডিভাইসকে getCameraIdList()-এর মাধ্যমে প্রোগ্রামাটিক অ্যাক্সেস করতে পারবেন এবং openCamera()-এর মাধ্যমে কোনও নির্দিষ্ট ডিভাইসের সাথে কানেক্ট করতে পারবেন। ছবি ক্যাপচার করা শুরু করতে, একটি CameraCaptureSession তৈরি করুন এবং ক্যাপচার করা ছবি পাঠানোর জন্য Surface অবজেক্ট নির্দিষ্ট করুন। CameraCaptureSession-কে কনফিগার করে সিঙ্গেল শট বা বার্স্ট মোডে একাধিক ছবি তোলা যায়।

নতুন ছবি ক্যাপচার করা হলে বিজ্ঞপ্তি পেতে, CameraCaptureSession.CaptureCallbackলিসনার প্রয়োগ করুন এবং আপনার ক্যাপচার অনুরোধে এটি সেট করুন। সিস্টেম এখন ছবি ক্যাপচার করার অনুরোধ সম্পূর্ণ করলে, আপনার CameraCaptureSession.CaptureCallback লিসনার একটি কল পান onCaptureCompleted(), যা আপনাকে CaptureResult-এ ছবি ক্যাপচার মেটাডেটা প্রদান করে।

CameraCharacteristics ক্লাস আপনার অ্যাপকে শনাক্ত করতে দেয় যে ডিভাইসে কোন ক্যামেরা ফিচার উপলভ্য। অবজেক্টের INFO_SUPPORTED_HARDWARE_LEVEL প্রপার্টি ক্যামেরার কার্যকারিতার লেভেলকে বোঝায়।

  • সব ডিভাইসে অন্তত INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY হার্ডওয়্যার লেভেল কাজ করে, যার ক্ষমতা মোটামুটিভাবে বাতিল করা Camera API-এর সমান।
  • INFO_SUPPORTED_HARDWARE_LEVEL_FULL হার্ডওয়্যার লেভেল কাজ করে এমন ডিভাইস, ম্যানুয়াল কন্ট্রোল, ক্যাপচার ও পোস্ট-প্রসেসিং এবং হাই ফ্রেম রেটে হাই-রেজোলিউশন ছবি ক্যাপচার করতে পারে।

আপডেট করা ক্যামেরা API কীভাবে ব্যবহার করতে হয় তা জানতে, এই রিলিজের Camera2Basic ও Camera2Video প্রয়োগের স্যাম্পেল দেখুন।

অডিও প্লেব্যাক

এই রিলিজের মধ্যে AudioTrack-এ নিম্নলিখিত পরিবর্তন করা হয়েছে:

  • আপনার অ্যাপ এখন ফ্লোটিং-পয়েন্ট ফর্ম্যাটে (ENCODING_PCM_FLOAT) অডিও ডেটা সাপ্লাই করতে পারবে। এটি আরও বেশি ডায়নামিক রেঞ্জ, আরও সামঞ্জস্যপূর্ণ নির্ভুলতা এবং আরও বেশি হেডরুমের অনুমতি দেয়। মধ্যবর্তী গণনা করার সময় ফ্লোটিং-পয়েন্ট অ্যারিথমেটিক বিশেষভাবে কাজে লাগে। প্লেব্যাক এন্ডপয়েন্ট অডিও ডেটার জন্য ইন্টিজার ফর্ম্যাট এবং কম বিট ডেপথ ব্যবহার করে। (Android 5.0-এ, ইন্টার্নাল পাইপলাইনের কিছু অংশ এখনও ফ্লোটিং পয়েন্ট নয়।)
  • আপনার অ্যাপ এখন MediaCodec-এর দেওয়া ফর্ম্যাটের মতো একই ফর্ম্যাটে ByteBuffer হিসেবে অডিও ডেটা প্রদান করতে পারবে।
  • WRITE_NON_BLOCKING বিকল্পটি কিছু অ্যাপের জন্য বাফারিং ও মাল্টিথ্রেডিং সহজ করে দিতে পারে।

মিডিয়া প্লেব্যাক কন্ট্রোল

নতুন নোটিফিকেশন ও মিডিয়া এপিআই ব্যবহার করে নিশ্চিত করুন যে সিস্টেম UI আপনার মিডিয়া প্লেব্যাক সম্পর্কে জানে এবং অ্যালবাম আর্ট এক্সট্র্যাক্ট ও দেখাতে পারে। নতুন MediaSession এবং MediaController ক্লাসের সাহায্যে এখন UI ও পরিষেবা জুড়ে মিডিয়া প্লেব্যাক কন্ট্রোল করা আরও সহজ।

নতুন MediaSession ক্লাসটি সচল না থাকা RemoteControlClient ক্লাসের পরিবর্তে ব্যবহার করা হয় এবং এটি ট্রান্সপোর্ট কন্ট্রোল ও মিডিয়া বোতাম ম্যানেজ করার জন্য কলব্যাক পদ্ধতির একটি সেট প্রদান করে। আপনার অ্যাপ যদি মিডিয়া প্লেব্যাক প্রদান করে এবং Android TV বা Wear প্ল্যাটফর্মে চলে, তাহলে একই কলব্যাক পদ্ধতি ব্যবহার করে আপনার ট্রান্সপোর্ট কন্ট্রোল ম্যানেজ করতে MediaSession ক্লাস ব্যবহার করুন।

আপনি এখন নতুন MediaController ক্লাসের সাহায্যে নিজের মিডিয়া কন্ট্রোলার অ্যাপ তৈরি করতে পারবেন। এই ক্লাসটি আপনার অ্যাপের UI প্রসেস থেকে মিডিয়া প্লেব্যাক মনিটর ও কন্ট্রোল করার একটি থ্রেড-সেফ উপায় প্রদান করে। কন্ট্রোলার তৈরি করার সময়, একটি MediaSession.Token অবজেক্ট নির্দিষ্ট করুন যাতে আপনার অ্যাপ প্রদত্ত MediaSession-এর সাথে ইন্টার‍্যাক্ট করতে পারে। MediaController.TransportControls পদ্ধতি ব্যবহার করে, আপনি play(), stop(), skipToNext(), এবং setRating() এর মতো কমান্ড পাঠাতে পারবেন যাতে সেই সেশনে মিডিয়া প্লেব্যাক কন্ট্রোল করা যায়। এছাড়াও, কন্ট্রোলারের সাহায্যে আপনি সেশনে মেটাডেটা ও স্টেট পরিবর্তনের জন্য MediaController.Callback অবজেক্ট রেজিস্টার করতে পারবেন।

এছাড়াও, আপনি নতুন Notification.MediaStyle ক্লাস ব্যবহার করে মিডিয়া সেশনের সাথে যুক্ত প্লেব্যাক কন্ট্রোল সহ উন্নত বিজ্ঞপ্তি তৈরি করতে পারবেন।

মিডিয়া ব্রাউজিং

Android 5.0, নতুন android.media.browse API-এর মাধ্যমে, অ্যাপকে অন্য অ্যাপের মিডিয়া কন্টেন্ট লাইব্রেরি ব্রাউজ করার ক্ষমতা দেয়। আপনার অ্যাপে মিডিয়া কন্টেন্ট এক্সপোজ করতে, MediaBrowserService ক্লাস এক্সটেন্ড করুন। আপনার MediaBrowserService প্রয়োগ করার ফলে MediaSession.Token-এ অ্যাক্সেস পাওয়া উচিত যাতে অ্যাপগুলি আপনার পরিষেবার মাধ্যমে প্রদান করা মিডিয়া কন্টেন্ট চালাতে পারে।

মিডিয়া ব্রাউজার পরিষেবার সাথে ইন্টার‍্যাক্ট করতে, MediaBrowser ক্লাস ব্যবহার করুন। MediaBrowser ইনস্ট্যান্স তৈরি করার সময় MediaSession-এর জন্য কম্পোনেন্টের নাম নির্দিষ্ট করুন। সেই ব্রাউজার ইনস্ট্যান্স ব্যবহার করে, আপনার অ্যাপ সংশ্লিষ্ট পরিষেবার সাথে কানেক্ট করতে এবং MediaSession.Token অবজেক্ট পেতে পারে, যাতে সেই পরিষেবার মাধ্যমে প্রকাশিত কন্টেন্ট চালানো যায়।

স্টোরেজ

ডিরেক্টরি বেছে নেওয়া

Android 5.0 স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক আরও উন্নত করেছে যাতে ব্যবহারকারীরা সম্পূর্ণ ডিরেক্টরি সাবট্রি বেছে নিতে পারেন। এর ফলে অ্যাপগুলি সেখানে থাকা সব ডকুমেন্টে রিড/রাইট অ্যাক্সেস পায় এবং প্রতিটি আইটেমের জন্য ব্যবহারকারীর কনফার্মেশনের প্রয়োজন হয় না।

ডিরেক্টরি সাবট্রি বেছে নিতে, একটি OPEN_DOCUMENT_TREE ইনটেন্ট তৈরি করে পাঠান। সিস্টেম এমন সব DocumentsProvider ইনস্ট্যান্স দেখায় যেগুলি সাবট্রি বেছে নেওয়াকে সাপোর্ট করে, এর ফলে ব্যবহারকারী কোনও ডিরেক্টরি ব্রাউজ ও বেছে নিতে পারেন। ফেরত আসা URI বেছে নেওয়া সাবট্রি অ্যাক্সেস করার জন্য ব্যবহার করা হয়। তারপরে, সাবট্রি এক্সপ্লোর করতে আপনি buildChildDocumentsUriUsingTree() ও buildDocumentUriUsingTree() এর সাথে query() ব্যবহার করতে পারবেন।

নতুন createDocument() পদ্ধতির সাহায্যে আপনি সাবট্রি-এর মধ্যে যেকোনও জায়গায় নতুন ডকুমেন্ট বা ডিরেক্টরি তৈরি করতে পারবেন। আগে থেকে থাকা ডকুমেন্ট ম্যানেজ করতে, renameDocument() এবং deleteDocument() ব্যবহার করুন। এইসব কল ইস্যু করার আগে COLUMN_FLAGS প্রদানকারীর সহায়তা আছে কিনা তা যাচাই করে নিন।

আপনি যদি DocumentsProvider প্রয়োগ করেন এবং সাবট্রি বেছে নেওয়ার সুবিধা দিতে চান, তাহলে isChildDocument() প্রয়োগ করুন এবং আপনার COLUMN_FLAGS-এ FLAG_SUPPORTS_IS_CHILD অন্তর্ভুক্ত করুন।

এছাড়াও, Android 5.0, শেয়ার করা স্টোরেজে নতুন প্যাকেজ-নির্দিষ্ট ডিরেক্টরি পরিচয় করায়, যেখানে আপনার অ্যাপ, MediaStore-এ অন্তর্ভুক্ত করার জন্য মিডিয়া ফাইল রাখতে পারে। নতুন getExternalMediaDirs() সব শেয়ার্ড স্টোরেজ ডিভাইসে এইসব ডিরেক্টরির পাথ রিটার্ন করে। একইভাবে, getExternalFilesDir(), রিটার্ন করা পাথ অ্যাক্সেস করার জন্য আপনার অ্যাপের কোনও অতিরিক্ত অনুমতির প্রয়োজন নেই। এইসব ডিরেক্টরিতে নতুন মিডিয়া আছে কিনা তা প্ল্যাটফর্ম মাঝে মাঝে স্ক্যান করে দেখে, তবে আপনি MediaScannerConnection ব্যবহার করে নতুন কন্টেন্ট স্ক্যান করতে পারেন।

ওয়্যারলেস ও কানেক্টিভিটি

একাধিক নেটওয়ার্ক কানেকশন

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

আপনার অ্যাপ থেকে কোনও নেটওয়ার্ক ডাইনামিক বেছে নিতে ও কানেক্ট করতে, এইসব ধাপ ফলো করুন:

  1. ConnectivityManager তৈরি করুন।
  2. NetworkRequest অবজেক্ট তৈরি করতে NetworkRequest.Builder ক্লাস ব্যবহার করুন এবং আপনার অ্যাপের আগ্রহের নেটওয়ার্ক ফিচার ও ট্রান্সপোর্ট টাইপ নির্দিষ্ট করুন।
  3. উপযুক্ত নেটওয়ার্ক স্ক্যান করতে, requestNetwork() বা registerNetworkCallback()-এ কল করুন এবং NetworkRequest অবজেক্ট ও ConnectivityManager.NetworkCallback-এর প্রয়োগ পাস করুন। কোনও উপযুক্ত নেটওয়ার্ক শনাক্ত করা হলে, তাতে অ্যাক্টিভভাবে সুইচ করতে চাইলে requestNetwork() পদ্ধতি ব্যবহার করুন; অ্যাক্টিভভাবে সুইচ না করে, স্ক্যান করা নেটওয়ার্কের শুধুমাত্র বিজ্ঞপ্তি পেতে, এর পরিবর্তে registerNetworkCallback() পদ্ধতি ব্যবহার করুন।

সিস্টেম উপযুক্ত নেটওয়ার্ক শনাক্ত করলে, সেটি নেটওয়ার্কের সাথে কানেক্ট করে এবং onAvailable() কলব্যাক ইনভোক করে। নেটওয়ার্ক সম্পর্কে অতিরিক্ত তথ্য পেতে অথবা বেছে নেওয়া নেটওয়ার্ক ব্যবহার করার জন্য ট্রাফিককে ডাইরেক্ট করতে, আপনি কলব্যাক থেকে Network অবজেক্ট ব্যবহার করতে পারেন।

ব্লুটুথ লো এনার্জি

Android 4.3 ভার্সনে সেন্ট্রাল রোলে ব্লুটুথ লো এনার্জি (ব্লুটুথ LE)-এর জন্য প্ল্যাটফর্ম সাপোর্ট চালু করা হয়েছে। Android 5.0-এ, Android ডিভাইস এখন ব্লুটুথ LE পেরিফেরাল ডিভাইস হিসেবে কাজ করতে পারে। অ্যাপ এই ক্ষমতা ব্যবহার করে আশেপাশের ডিভাইসে নিজের উপস্থিতি জানাতে পারে। যেমন, আপনি এমন অ্যাপ তৈরি করতে পারেন যা কোনও ডিভাইসকে পেডোমিটার বা হেলথ মনিটর হিসেবে কাজ করতে এবং অন্য ব্লুটুথ LE ডিভাইসের সাথে এর ডেটা কমিউনিকেট করতে দেয়।

নতুন android.bluetooth.le API আপনার অ্যাপকে বিজ্ঞাপন ব্রডকাস্ট করতে, উত্তর স্ক্যান করতে এবং আশেপাশের ব্লুটুথ LE ডিভাইসের সাথে কানেকশন তৈরি করতে দেয়। নতুন বিজ্ঞাপন ও স্ক্যানিং ফিচার ব্যবহার করতে, আপনার মেনিফেস্টে BLUETOOTH_ADMIN অনুমতি যোগ করুন। ব্যবহারকারীরা Play Store থেকে আপনার অ্যাপ আপডেট বা ডাউনলোড করলে, আপনার অ্যাপকে নিম্নলিখিত অনুমতি দেওয়ার জন্য তাদের বলা হয়: "ব্লুটুথ কানেকশন সংক্রান্ত তথ্য: অ্যাপকে ব্লুটুথ কন্ট্রোল করতে দেয়, এর মধ্যে আশেপাশের ব্লুটুথ ডিভাইস সম্পর্কে তথ্য সম্প্রচার করা বা পাওয়া অন্তর্ভুক্ত।"

অন্যান্য ডিভাইস যাতে আপনার অ্যাপ খুঁজে পেতে পারে, সেই জন্য Bluetooth LE বিজ্ঞাপন দেওয়া শুরু করতে, startAdvertising() কল করুন এবং AdvertiseCallback ক্লাসের একটি ইমপ্লিমেন্টেশন পাস করুন। বিজ্ঞাপন অপারেশন সফল বা ব্যর্থ হলে কলব্যাক অবজেক্ট একটি রিপোর্ট পায়।

Android 5.0 ScanFilter ক্লাস নিয়ে এসেছে যাতে আপনার অ্যাপ শুধুমাত্র সেইসব নির্দিষ্ট ধরনের ডিভাইস স্ক্যান করতে পারে যেগুলিতে এটি আগ্রহী। ব্লুটুথ LE ডিভাইস স্ক্যান করা শুরু করতে, startScan() কল করুন এবং ফিল্টারের একটি তালিকা পাস করুন। মেথড কলের মধ্যে, আপনাকে অবশ্যই ScanCallback-এর একটি ইমপ্লিমেন্টেশন প্রদান করতে হবে যাতে Bluetooth LE বিজ্ঞাপন খুঁজে পাওয়া গেলে রিপোর্ট করা যায়।

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

NFC-এর আরও বেশি ও আরও ফ্লেক্সিবল ব্যবহার চালু করতে Android 5.0 এইসব উন্নতি যোগ করে:

  • Android Beam এখন শেয়ার মেনুতে উপলভ্য।
  • আপনার অ্যাপ, ডেটা শেয়ার করার জন্য ব্যবহারকারীর ডিভাইসে Android Beam চালু করতে পারে, এর জন্য invokeBeam()-এ কল করতে হবে। এর ফলে ডেটা ট্রান্সফার সম্পূর্ণ করার জন্য ব্যবহারকারীকে অন্য NFC-চালু ডিভাইসের সাথে ডিভাইসটি ম্যানুয়ালি ট্যাপ করতে হয় না।
  • UTF-8 টেক্সট ডেটা আছে এমন NDEF রেকর্ড তৈরি করতে, আপনি নতুন createTextRecord() পদ্ধতি ব্যবহার করতে পারবেন।
  • আপনি কোনও পেমেন্ট অ্যাপ ডেভেলপ করলে, এখন আপনার কাছে registerAidsForService() কল করে ডায়নামিক পদ্ধতিতে NFC অ্যাপ্লিকেশন আইডি (AID) রেজিস্টার করার ক্ষমতা আছে। এছাড়াও, নির্দিষ্ট অ্যাক্টিভিটি ফোরগ্রাউন্ডে থাকাকালীন কোন কার্ড এমুলেশন পরিষেবা ব্যবহার করা উচিত তা সেট করতে আপনি setPreferredService() ব্যবহার করতে পারেন।

Project Volta

নতুন ফিচারের পাশাপাশি, Android 5.0 ব্যাটারির আয়ু উন্নত করার উপর জোর দেয়। আপনার অ্যাপের পাওয়ার কনজাম্পশন বুঝতে ও অপ্টিমাইজ করতে নতুন API ও টুল ব্যবহার করুন।

চাকরি শিডিউল করা

Android 5.0 একটি নতুন JobScheduler API প্রদান করে যা আপনাকে ব্যাটারির আয়ু অপ্টিমাইজ করতে সাহায্য করে। এটি সিস্টেমকে এমন কাজ করতে দেয় যা পরে বা নির্দিষ্ট শর্তে (যেমন, ডিভাইস চার্জ করার সময়) অ্যাসিঙ্ক্রোনাসভাবে রান করে। এই ধরনের পরিস্থিতিতে জব শিডিউলিং কাজে লাগে:

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

JobInfo অবজেক্টের মাধ্যমে কাজের ইউনিট এনক্যাপসুলেট করা হয়। এই অবজেক্ট শিডিউলিংয়ের মাপকাঠি নির্দিষ্ট করে।

শিডিউল করা টাস্ক কীভাবে রান করবে তা কনফিগার করতে JobInfo.Builder ক্লাস ব্যবহার করুন। আপনি নির্দিষ্ট পরিস্থিতিতে টাস্ক চালানোর জন্য শিডিউল করতে পারবেন, যেমন:

  • ডিভাইস চার্জ করা হলে শুরু হয়
  • ডিভাইস আনমিটারেড নেটওয়ার্কে কানেক্ট করা হলে শুরু হয়
  • ডিভাইস অলস থাকলে শুরু করুন
  • নির্দিষ্ট সময়সীমার আগে বা ন্যূনতম বিলম্বের সাথে সম্পূর্ণ করা

যেমন, আনমিটারেড নেটওয়ার্কে আপনার টাস্ক চালানোর জন্য আপনি এই ধরনের কোড যোগ করতে পারেন:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

জাভা

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

ডিভাইসে স্থিতিশীল পাওয়ার থাকলে (অর্থাৎ, এটি ২ মিনিটের বেশি সময় ধরে প্লাগ-ইন করা আছে এবং ব্যাটারি ভাল অবস্থায় আছে), সিস্টেম, চালানোর জন্য রেডি থাকা যেকোনও শিডিউল করা জব চালাবে, এমনকি জবের ডেডলাইন শেষ না হয়ে থাকলেও।

JobScheduler API কীভাবে ব্যবহার করতে হয় তার উদাহরণ দেখতে, এই রিলিজে JobSchedulerSample প্রয়োগের নমুনা দেখুন।

ব্যাটারি ব্যবহারের জন্য ডেভেলপার টুল

নতুন dumpsys batterystats কমান্ডটি ডিভাইসে ব্যাটারি ব্যবহার সম্পর্কে আকর্ষণীয় পরিসংখ্যানগত ডেটা তৈরি করে, যা অনন্য ব্যবহারকারী আইডি (UID) দ্বারা সাজানো হয়। পরিসংখ্যানের মধ্যে এগুলি অন্তর্ভুক্ত:

  • ব্যাটারি সংক্রান্ত ইভেন্টের ইতিহাস
  • ডিভাইসের জন্য গ্লোবাল পরিসংখ্যান
  • প্রতিটি UID ও সিস্টেম কম্পোনেন্ট পিছু আনুমানিক বিদ্যুৎ ব্যবহার
  • প্রতিটি অ্যাপের ক্ষেত্রে প্যাকেট পিছু মোবাইল ms
  • সিস্টেম UID সম্পর্কিত সামগ্রিক পরিসংখ্যান
  • অ্যাপ UID সম্পর্কিত সামগ্রিক পরিসংখ্যান

আউটপুট কাস্টমাইজ করার বিভিন্ন বিকল্প সম্পর্কে জানতে --help বিকল্প ব্যবহার করুন। যেমন, ডিভাইস শেষবার চার্জ করার পর থেকে কোনও নির্দিষ্ট অ্যাপ প্যাকেজের জন্য ব্যাটারি ব্যবহার সংক্রান্ত পরিসংখ্যান প্রিন্ট করতে, এই কমান্ডটি চালান:

$ adb shell dumpsys batterystats --charged <package-name>

আপনি dumpsys কমান্ডের আউটপুটে Battery Historian টুল ব্যবহার করে লগ থেকে পাওয়ার-সম্পর্কিত ইভেন্টের HTML ভিজ্যুয়ালাইজেশন তৈরি করতে পারবেন। এই তথ্য ব্যাটারি সম্পর্কিত যেকোনও সমস্যা বুঝতে ও শনাক্ত করতে আপনাকে সাহায্য করে।

কর্মক্ষেত্রে ও শিক্ষাক্ষেত্রে Android

পরিচালিত প্রভিশনিং

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

ম্যানেজ করা প্রোভিশনিং প্রসেস শুরু করতে, Intent-এ ACTION_PROVISION_MANAGED_PROFILE পাঠান। কলটি সফল হলে, সিস্টেম onProfileProvisioningComplete() কলব্যাক ট্রিগার করে। তারপরে, এই ম্যানেজ করা প্রোফাইল চালু করতে setProfileEnabled()-এ কল করতে পারেন।

ম্যানেজ করা প্রোফাইলে ডিফল্ট হিসেবে শুধুমাত্র অ্যাপের একটি ছোট সাবসেট চালু করা থাকে। আপনি ম্যানেজ করা প্রোফাইলে অতিরিক্ত অ্যাপ ইনস্টল করতে পারেন, এর জন্য enableSystemApp()-এ কল করুন।

আপনি যদি কোনও লঞ্চার অ্যাপ ডেভেলপ করে থাকেন, তাহলে বর্তমান ব্যবহারকারী এবং সংশ্লিষ্ট ম্যানেজ করা প্রোফাইলের জন্য লঞ্চ করা যায় এমন অ্যাক্টিভিটির তালিকা পেতে, আপনি নতুন LauncherApps ক্লাস ব্যবহার করতে পারবেন। আপনার লঞ্চার, আইকন ড্রয়েবলের সাথে একটি অফিস ব্যাজ যোগ করে ম্যানেজ করা অ্যাপগুলিকে দৃশ্যত বিশিষ্ট করে তুলতে পারে। ব্যাজযুক্ত আইকন ফিরিয়ে আনতে, কল করুন getUserBadgedIcon()।

নতুন কার্যকারিতা কীভাবে ব্যবহার করতে হয় তা দেখতে, এই রিলিজের BasicManagedProfile প্রয়োগের নমুনা দেখুন।

ডিভাইসের মালিক

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

ডিভাইস মালিককে ডেপ্লয় ও অ্যাক্টিভেট করতে, ডিভাইসটি যখন আনপ্রভিশনড অবস্থায় থাকে, তখন আপনাকে অবশ্যই একটি প্রোগ্রামিং অ্যাপ থেকে ডিভাইসে NFC ডেটা ট্রান্সফার করতে হবে। এই ডেটা ট্রান্সফার, ম্যানেজ করা প্রোভিশনিং-এ বর্ণিত প্রোভিশনিং ইনটেন্ট এর মতো একই তথ্য পাঠায়।

স্ক্রিন পিন করা

Android 5.0-তে নতুন স্ক্রিন পিনিং API চালু করা হয়েছে যা আপনাকে সাময়িকভাবে ব্যবহারকারীদের টাস্ক ছেড়ে বেরিয়ে যাওয়া বা বিজ্ঞপ্তি দ্বারা বাধা পাওয়া থেকে আটকাতে দেয়। এটি ব্যবহার করা যেতে পারে, যেমন, আপনি যদি Android-এ উচ্চ ঝুঁকিযুক্ত মূল্যায়ন সংক্রান্ত প্রয়োজনীয়তা পূরণ করতে বা একক-উদ্দেশ্য বা কিওস্ক অ্যাপ্লিকেশন তৈরি করেন। আপনার অ্যাপ স্ক্রিন পিনিং অ্যাক্টিভেট করলে, ব্যবহারকারীরা বিজ্ঞপ্তি দেখতে, অন্যান্য অ্যাপ অ্যাক্সেস করতে বা হোম স্ক্রিনে ফিরে যেতে পারবেন না, যতক্ষণ না আপনার অ্যাপ মোড থেকে বেরিয়ে আসছে।

স্ক্রিন পিনিং অ্যাক্টিভেট করার দুটি উপায় আছে:

  • ম্যানুয়ালি: ব্যবহারকারী সেটিংস > নিরাপত্তা > স্ক্রিন পিনিং বিকল্প থেকে স্ক্রিন পিনিং চালু করতে এবং রিসেন্ট স্ক্রিনে সবুজ পিন আইকনে টাচ করে যে টাস্ক পিন করতে চান সেটি বেছে নিতে পারবেন।
  • প্রোগ্রাম্যাটিক উপায়ে: প্রোগ্রাম্যাটিক উপায়ে স্ক্রিন পিনিং অ্যাক্টিভেট করতে, আপনার অ্যাপ থেকে startLockTask() কল করুন। অনুরোধকারী অ্যাপটি ডিভাইসের মালিক না হলে, ব্যবহারকারীকে কনফার্ম করার জন্য প্রম্পট করা হবে। ডিভাইসের মালিকের অ্যাপ, ব্যবহারকারীর কনফার্মেশন ধাপ ছাড়াই অ্যাপকে পিন করার মতো করে তুলতে setLockTaskPackages() মেথড কল করতে পারে।

টাস্ক লকিং চালু থাকলে, নিম্নলিখিত আচরণ হয়:

  • স্ট্যাটাস বার ফাঁকা থাকে এবং ব্যবহারকারীর বিজ্ঞপ্তি ও স্ট্যাটাস সংক্রান্ত তথ্য আড়াল করা থাকে।
  • হোম ও সাম্প্রতিক অ্যাপ বোতাম লুকানো আছে।
  • অন্যান্য অ্যাপ নতুন অ্যাক্টিভিটি লঞ্চ করতে পারবে না।
  • বর্তমান অ্যাপ নতুন অ্যাক্টিভিটি শুরু করতে পারে, তবে তা করার ফলে নতুন টাস্ক তৈরি হলে চলবে না।
  • ডিভাইসের মালিক স্ক্রিন পিনিং চালু করলে, অ্যাপ কল না করা পর্যন্ত ব্যবহারকারী আপনার অ্যাপে লকড থাকেন stopLockTask()।
  • ডিভাইসের মালিক নন এমন অন্য কোনও অ্যাপ বা ব্যবহারকারী সরাসরি স্ক্রিন পিনিং অ্যাক্টিভেট করলে, ব্যবহারকারী 'ব্যাক' ও 'সাম্প্রতিক' বোতাম দু'টি হোল্ড করে বেরিয়ে আসতে পারবেন।

প্রিন্টিং ফ্রেমওয়ার্ক

পিডিএফকে বিটম্যাপ হিসেবে রেন্ডার করা

আপনি এখন নতুন PdfRenderer ক্লাস ব্যবহার করে প্রিন্ট করার জন্য PDF ডকুমেন্ট পৃষ্ঠাগুলিকে বিটম্যাপ ছবিতে রেন্ডার করতে পারবেন। আপনাকে অবশ্যই এমন একটি ParcelFileDescriptor নির্দিষ্ট করতে হবে যেটি সিক করা যায় (অর্থাৎ, কন্টেন্ট এ এলোমেলোভাবে অ্যাক্সেস করা যায়) এবং যেখানে সিস্টেম প্রিন্ট করা যায় এমন কন্টেন্ট লেখে। আপনার অ্যাপ রেন্ডার করার জন্য একটি পৃষ্ঠা পেতে পারে openPage(), তারপর render() কল করে খোলা PdfRenderer.Page-কে বিটম্যাপে পরিণত করতে পারে। এছাড়াও, আপনি অতিরিক্ত প্যারামিটার সেট করতে পারেন যদি আপনি শুধুমাত্র ডকুমেন্টের একটি অংশকে বিটম্যাপ ছবিতে কনভার্ট করতে চান (যেমন, ডকুমেন্টকে জুম-ইন করতে টাইলের মাধ্যমে রেন্ডারিং ইমপ্লিমেন্ট করতে)।

নতুন API কীভাবে ব্যবহার করতে হয় তার উদাহরণ দেখতে, PdfRendererBasic স্যাম্পেল দেখুন।

সিস্টেম

অ্যাপ্লিকেশান ব্যবহারের পরিসংখ্যান

আপনি এখন নতুন android.app.usage API-এর সাহায্যে Android ডিভাইসে অ্যাপ ব্যবহারের ইতিহাস অ্যাক্সেস করতে পারবেন। এই API, বাতিল করা getRecentTasks() পদ্ধতির তুলনায় আরও বিস্তারিত ব্যবহার সংক্রান্ত তথ্য প্রদান করে। এই API ব্যবহার করতে, আপনাকে প্রথমে নিজের মেনিফেস্টে "android.permission.PACKAGE_USAGE_STATS" অনুমতি ঘোষণা করতে হবে। এছাড়াও, ব্যবহারকারীকে অবশ্যই সেটিংস > সুরক্ষা > অ্যাপ বিকল্পের মাধ্যমে ব্যবহারের অ্যাক্সেস সহ এই অ্যাপের অ্যাক্সেস চালু করতে হবে।

সিস্টেম প্রতিটি অ্যাপের ভিত্তিতে ব্যবহারের ডেটা সংগ্রহ করে এবং দৈনিক, সাপ্তাহিক, মাসিক ও বার্ষিক বিরতিতে ডেটা একত্রিত করে। সিস্টেম এই ডেটা সর্বাধিক কতদিন রাখে তা নিচে উল্লেখ করা হল:

  • দৈনিক ডেটা: ৭ দিন
  • সাপ্তাহিক ডেটা: ৪ সপ্তাহ
  • মাসিক ডেটা: ৬ মাস
  • বার্ষিক ডেটা: ২ বছর

প্রতিটি অ্যাপের জন্য, সিস্টেম নিম্নলিখিত ডেটা রেকর্ড করে:

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

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

টেস্টিং ও অ্যাক্সেসিবিলিটি সংক্রান্ত উন্নতি

Android 5.0-তে টেস্টিং ও অ্যাক্সেসিবিলিটির জন্য নিম্নলিখিত সহায়তা যোগ করা হয়েছে:

  • নতুন getWindowAnimationFrameStats() ও getWindowContentFrameStats() মেথড উইন্ডো অ্যানিমেশন ও কন্টেন্টের জন্য ফ্রেম সংক্রান্ত পরিসংখ্যান ক্যাপচার করে। এইসব পদ্ধতি আপনাকে ইন্সট্রুমেন্টেশন টেস্ট লিখতে দেয় যাতে কোনও অ্যাপ ফ্রেম রেন্ডার করছে কিনা তা মূল্যায়ন করা যায়। এর ফলে ব্যবহারকারীর অভিজ্ঞতা ভাল হয়।
  • নতুন executeShellCommand() পদ্ধতি আপনাকে ইন্সট্রুমেন্টেশন টেস্ট থেকে শেল কমান্ড এক্সিকিউট করতে দেয়। কমান্ড এক্সিকিউশন হল ডিভাইসের সাথে কানেক্ট করা হোস্ট থেকে adb shell চালানোর মতো, যা আপনাকে dumpsys, am, content ও pm-এর মতো শেল-ভিত্তিক টুল ব্যবহার করতে দেয়।
  • অ্যাক্সেসিবিলিটি API ব্যবহার করে এমন অ্যাক্সেসিবিলিটি পরিষেবা ও টেস্ট টুল (যেমন UiAutomator) এখন স্ক্রিনে থাকা উইন্ডোর প্রপার্টি সম্পর্কে বিস্তারিত তথ্য রিট্রিভ করতে পারবে, যেগুলির সাথে দৃষ্টিশক্তি সম্পন্ন ব্যবহারকারীরা ইন্টার‍্যাক্ট করতে পারেন। AccessibilityWindowInfo অবজেক্টের তালিকা রিট্রিভ করতে, নতুন getWindows() মেথড কল করুন।
  • নতুন AccessibilityNodeInfo.AccessibilityAction ক্লাস আপনাকে কোনও AccessibilityNodeInfo-এ পারফর্ম করার জন্য স্ট্যান্ডার্ড বা কাস্টমাইজ করা অ্যাকশন নির্ধারণ করতে দেয়। নতুন AccessibilityNodeInfo.AccessibilityAction ক্লাসটি অ্যাকশন সম্পর্কিত API-কে প্রতিস্থাপন করে যা আগে AccessibilityNodeInfo-এ পাওয়া যেত।
  • Android 5.0 আপনার অ্যাপে টেক্সট-টু-স্পিচ সিন্থেসিসের উপর আরও সূক্ষ্ম-গ্রেন কন্ট্রোল প্রদান করে। নতুন Voice ক্লাস আপনার অ্যাপকে নির্দিষ্ট লোকেল, কোয়ালিটি ও লেটেন্সি রেটিং এবং টেক্সট-টু-স্পিচ ইঞ্জিন-নির্দিষ্ট প্যারামিটার সম্পর্কিত ভয়েস প্রোফাইল ব্যবহার করতে দেয়।

IME

ইনপুট ভাষার মধ্যে সহজে পরিবর্তন করা

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

এছাড়াও, ফ্রেমওয়ার্ক এখন চেক করে দেখে যে পরবর্তী IME-তে কোনও সুইচিং মেকানিজম আছে কিনা (এবং, এইভাবে, সেই IME-তে এর পরের IME-তে সুইচ করার সুবিধা আছে কিনা)। সুইচ করার মেকানিজম সহ IME, সেটি ছাড়া IME-এ সাইকেল করবে না। এই আচরণগত পরিবর্তনটি switchToNextInputMethod() পদ্ধতির মাধ্যমে প্রয়োগ করা হয়।

আপডেট করা IME-সুইচিং API কীভাবে ব্যবহার করতে হয় তার উদাহরণ দেখতে, এই রিলিজে আপডেট করা সফ্ট-কীবোর্ড ইমপ্লিমেন্টেশন স্যাম্পেল দেখুন। IME-এর মধ্যে কীভাবে পরিবর্তন করতে হয় সেই সম্পর্কে আরও জানতে, ইনপুট পদ্ধতি তৈরি করা দেখুন।

ম্যানিফেস্ট ঘোষণা

ঘোষণাযোগ্য প্রয়োজনীয় ফিচার

নিচে উল্লেখ করা ভ্যালুগুলি এখন <uses-feature> এলিমেন্টে কাজ করে, তাই আপনি নিশ্চিত হতে পারেন যে আপনার অ্যাপ শুধুমাত্র সেইসব ডিভাইসে ইনস্টল করা আছে যেগুলি আপনার অ্যাপের প্রয়োজনীয় ফিচার প্রদান করে।

ব্যবহারকারীর অনুমতি

আপনার অ্যাপকে নির্দিষ্ট API অ্যাক্সেস করার জন্য যেসব অনুমতির প্রয়োজন, সেগুলি ঘোষণা করতে <uses-permission> এলিমেন্টে নিম্নলিখিত অনুমতি এখন কাজ করে।

  • BIND_DREAM_SERVICE: API লেভেল ২১ ও তার পরের যেকোনও লেভেলে টার্গেট করার সময়, Daydream পরিষেবা এই অনুমতি চায়, যাতে শুধুমাত্র সিস্টেমই এর সাথে কানেক্ট করতে পারে।