রুটিন ব্যাটারি সেভার

অ্যান্ড্রয়েড ১০-এ ‘বেসড অন রুটিন’ নামে একটি ব্যাটারি সেভার শিডিউল অপশন চালু করা হয়েছে। এই অপশনটি OEM দ্বারা নির্বাচিত কোনো অ্যাপকে আরও বুদ্ধিমান ব্যাটারি সেভার শিডিউলিংয়ের জন্য সিস্টেমে সংকেত পাঠানোর সুযোগ দেয়। এই অপশনটির জন্য কনফিগারেশন প্রয়োজন এবং এটি প্রয়োগ করা ঐচ্ছিক।

ডিভাইস কনফিগারেশন

এই অংশে ‘বেসড অন রুটিন’ অপশনটির জন্য আপনার ডিভাইসটি কীভাবে কনফিগার করবেন তা বর্ণনা করা হয়েছে।

প্রদানকারীর স্পেসিফিকেশন

ডিভাইসটি সঠিকভাবে কনফিগার করা হয়েছে তা সেটিংস UI-কে জানাতে, আপনার কনফিগ ওভারলে ব্যবহার করে config_batterySaverScheduleProvider ভ্যালুটিকে আপনার অ্যাপের প্যাকেজ নেম দিয়ে ওভাররাইড করুন। উদাহরণস্বরূপ, যদি আপনি চান যে com.google.android.apps.turbo অ্যাপ প্যাকেজটি ‘Based on routine’ সেটিংটি নিয়ন্ত্রণ করুক, তাহলে এই কনফিগ ভ্যালুটি সেট করুন:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

যাচাই করতে, আপনার ইমেজটি তৈরি করুন, ডিভাইসে ফ্ল্যাশ করুন এবং সেটিংসে যান।

ব্যাটারি > ব্যাটারি সেভার > ব্যাটারি সেভার শিডিউল'রুটিনের উপর ভিত্তি করে' বিকল্পটি প্রদর্শিত হবে।

ডিফল্ট অফ থ্রেশহোল্ড

config_dynamicPowerSavingsDefaultDisableThreshold ফিল্ডটি এমন একটি ব্যাটারি লেভেল নির্দিষ্ট করে, যেখানে পৌঁছালে সিস্টেম ব্যাটারি সেভার বন্ধ করে দেয়, যদি ‘বেসড অন’ রুটিন শিডিউলার এটি চালু করে থাকে। সিস্টেমের ডিফল্ট মান হলো ৮০%, কিন্তু আপনি এটি পরিবর্তন করতে পারেন।

অ্যাপ কনফিগারেশন

এই বিভাগে বর্ণনা করা হয়েছে কীভাবে আপনার অ্যাপকে 'Based on routine' অপশনটি ব্যবহার করার জন্য কনফিগার করতে হয়।

অনুমতি

একটি অ্যাপের নিয়মিত ব্যাটারি সেভার চালু করার জন্য প্রয়োজনীয় এপিআইগুলো android.permission.POWER_SAVER পারমিশন দ্বারা সুরক্ষিত। এটি একটি সিগনেচার বা প্রিভিলেজড পারমিশন। এর মানে হলো, অ্যাপটিকে অবশ্যই সিস্টেম ইমেজের একটি priv-app ডিরেক্টরিতে থাকতে হবে এবং আপনাকে স্পষ্টভাবে এই পারমিশনটি প্রদান করতে হবে।

বিশেষাধিকারপ্রাপ্ত অ্যাপের জন্য, আপনাকে অবশ্যই অ্যাপটির পার্টিশনে থাকা /etc/permissions/ ডিরেক্টরির একটি সিস্টেম কনফিগারেশন XML ফাইলে অনুমতি প্রদান করতে হবে। উদাহরণস্বরূপ, com.google.android.apps.turbo প্যাকেজ নামের একটি অ্যাপকে android.permission.POWER_SAVER অনুমতিটি প্রদান করতে হলে:

<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
    <privapp-permissions package="com.google.android.apps.turbo">
        <permission name="android.permission.POWER_SAVER"/>
    </privapp-permissions>
</permissions>

আপনি যদি সিস্টেম ইমেজে অ্যাপটিকে আগে থেকে এই অনুমতিটি না দেন, তাহলে অ্যাপটি সফলভাবে অনুমতিটি অর্জন করতে বা এপিআই (API) কল করতে পারবে না। সিস্টেম সাধারণ অনুমতি সংক্রান্ত ত্রুটি ছাড়া অন্য কোনো প্রতিক্রিয়া জানায় না, তাই অ্যাপটি এপিআইগুলো কল করতে পারছে কি না এবং সেগুলোর প্রভাব পর্যবেক্ষণ করা অত্যন্ত গুরুত্বপূর্ণ।

ইনস্টলেশন

‘বেসড অন রুটিন’ সঠিকভাবে কাজ করার জন্য, আপনাকে অবশ্যই প্রয়োজনীয় অনুমতিসহ অ্যাপটি সিস্টেম ইমেজে আগে থেকে ইনস্টল করতে হবে। শুধুমাত্র একটি অ্যাপকে android.permission.POWER_SAVER অনুমতি দিন এবং সেটিকে ‘বেসড অন রুটিন’ এপিআইগুলো নিয়ন্ত্রণ করতে দিন। যদি একাধিক অ্যাপ এই অনুমতি এবং এপিআইগুলো ব্যবহার করার চেষ্টা করে, তবে ফিচারটির আচরণ অসমর্থিত এবং অনির্দিষ্ট হয়ে যায়।

ট্রিগার রুটিন ব্যাটারি সেভার

এই অংশে বর্ণনা করা হয়েছে, কীভাবে আপনার অ্যাপ প্রদত্ত এপিআইগুলো ব্যবহার করে নিয়মিত ব্যাটারি সেভার চালু করতে পারে।

এপিআই

সেটআপ সফল হলে, কনফিগে উল্লেখিত OEM অ্যাপটি ব্যাটারি সেভার চালু করার জন্য PowerManager এর সংশ্লিষ্ট মেথডটিকে সফলভাবে কল করতে পারে:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

যদি ‘ Based on routine Battery Saver schedule’ অপশনটি চালু থাকে এবং অ্যাপটি powerSaveHint জন্য true ভ্যালু দিয়ে এই মেথডটি কল করে, তাহলে ব্যাটারি সেভার চালু হয়ে যায়। disableThreshold নির্দিষ্ট করুন, যাতে অ্যাপটি সিস্টেমের সাথে যোগাযোগ করতে না পারলেও, সিস্টেমটি ব্যাটারির সেই শতাংশ জানতে পারে যেখানে ব্যাটারি সেভার বন্ধ করা নিরাপদ।

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

এপিআইগুলো সফলভাবে কল করা হয়েছে কিনা তা যাচাই করতে, গ্লোবাল সেটিংস কোয়েরি করে নিশ্চিত করুন যে এপিআই কল অনুযায়ী ব্যাকেন্ড সেটিং-এর মান পরিবর্তিত হয়েছে। উদাহরণস্বরূপ, যদি আপনি ‘রুটিন ব্যাটারি সেভার মোডের উপর ভিত্তি করে’ নির্বাচন করেন এবং অ্যাপটি setDynamicPowerSaveHint(true, 10) কল করে, তাহলে গ্লোবাল সেটিংসে এই মানগুলো থাকবে:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

এরপর যদি আপনি setDynamicPowerSaveHint(false, 25) কল করেন, তাহলে মানগুলো হবে:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

আপনি এই adb কমান্ডটি ব্যবহার করে এই মানগুলি পরীক্ষা করতে পারেন:

adb shell settings get global <setting-name>

যাচাইকরণ

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

  • শতাংশের ভিত্তিতে: আপনি যদি ব্যাটারি সেভার শিডিউল UI-তে ‘শতাংশের ভিত্তিতে’ বিকল্পটি নির্বাচন করে ১৫% বেছে নেন, তাহলে ব্যাটারি সেভার কেবল তখনই স্বয়ংক্রিয়ভাবে চালু হবে যখন ব্যাটারির চার্জ ১৫%-এ পৌঁছাবে।
  • রুটিন অনুযায়ী: আপনি যদি ব্যাটারি সেভার শিডিউল UI-তে ‘রুটিন অনুযায়ী’ নির্বাচন করেন, তাহলে অ্যাপটি যখন true সহ API কল করে, তখন ব্যাটারি সেভার চালু হয়। এছাড়াও, ডিভাইসটি নির্দেশিত থ্রেশহোল্ড লেভেল পর্যন্ত চার্জ হয়ে আনপ্লাগ করা হলে ব্যাটারি সেভার স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।
  • কোনোটিই নয়: আপনি যদি ব্যাটারি সেভার শিডিউল UI-তে ‘কোনোটিই নয়’ নির্বাচন করেন, তাহলে ব্যাটারি সেভার কখনোই স্বয়ংক্রিয়ভাবে চালু হবে না।
  • ম্যানুয়াল ওভাররাইড: যদি অ্যাপটি ব্যাটারি সেভার চালু করে এবং আপনি কুইক সেটিংস , সেটিংস বা অন্য কোনো পদ্ধতি ব্যবহার করে ম্যানুয়ালি তা বন্ধ করে দেন, তাহলে আপনি নিজে থেকে আবার চালু না করা পর্যন্ত অথবা ডিভাইসটি প্লাগ ইন না করা পর্যন্ত এটি বন্ধই থাকবে।