ডিভাইস ব্যবস্থাপনা বাস্তবায়ন

এই বিভাগটি বর্ণনা করে যে কীভাবে পরিচালিত প্রোফাইলগুলির জন্য ডিভাইসগুলি প্রস্তুত করার জন্য প্রয়োজনীয় ডিভাইস পরিচালনা বৈশিষ্ট্যগুলিকে সক্ষম এবং যাচাই করা যায়৷ এটি কর্পোরেট পরিবেশে প্রয়োজনীয় ডিভাইস মালিক ব্যবহারকারীর ক্ষেত্রেও কভার করে।

AOSP কোড ছাড়াও, পরিচালিত প্রোফাইলগুলির সাথে কাজ করার জন্য একটি ডিভাইসের নিম্নলিখিত উপাদানগুলির প্রয়োজন৷

সাধারণ আবশ্যকতা

ডিভাইস পরিচালনাকে সমর্থন করতে ইচ্ছুক ডিভাইসগুলিকে অবশ্যই নিম্নলিখিত সাধারণ প্রয়োজনীয়তাগুলি পূরণ করতে হবে।

তাপীয় HAL মান

Android 7.0 এবং পরবর্তীতে HardwarePropertiesManager API-এর জন্য সমর্থন রয়েছে, একটি ডিভাইস পর্যবেক্ষণ এবং স্বাস্থ্য রিপোর্টিং API যা অ্যাপ্লিকেশনগুলিকে ডিভাইস হার্ডওয়্যারের অবস্থা অনুসন্ধান করতে সক্ষম করে। এই APIটি android.os.HardwarePropertiesManager এর মাধ্যমে প্রকাশ করা হয়েছে এবং HardwarePropertiesManagerService-এর মাধ্যমে HardwarePropertiesManagerService থার্মাল HAL ( hardware/libhardware/include/hardware/thermal.h )-এ কল করে। এটি একটি সুরক্ষিত API, যার অর্থ শুধুমাত্র ডিভাইস/প্রোফাইলের মালিক ডিভাইস পলিসি কন্ট্রোলার (DPC) অ্যাপ্লিকেশন এবং বর্তমান VrListenerService এটি কল করতে পারে।

HardwarePropertiesManager API সমর্থন করতে, ডিভাইস থার্মাল HAL বাস্তবায়ন নিম্নলিখিত মান রিপোর্ট করতে সক্ষম হতে হবে:

মান রিপোর্টিং স্কেল সক্ষম করে
[CPU|GPU|ব্যাটারি|ডিভাইস স্কিন] এর তাপমাত্রা ডিগ্রী সেলসিয়াসে উপাদানের তাপমাত্রা অ্যাপগুলি ডিভাইসের তাপমাত্রা এবং কম্পোনেন্ট থ্রটলিং/শাটডাউন তাপমাত্রা পরীক্ষা করতে পারে
CPU সক্রিয়/মোট সক্রিয় সময় মিলিসেকেন্ডে সময় অ্যাপগুলি প্রতি কোরে CPU ব্যবহার পরীক্ষা করতে পারে
পাখার গতি RPM অ্যাপগুলি ফ্যানের গতি পরীক্ষা করতে পারে

যখন একটি কোর (বা GPU, ব্যাটারি, ফ্যান) অফলাইনে চলে যায় বা প্লাগড/আনপ্লাগ করা হয় তখন ইমপ্লিমেন্টেশনগুলিকে রিপোর্টিং মানগুলির পরিস্থিতি সঠিকভাবে পরিচালনা করা উচিত।

ডিভাইস পরিচালনা সক্ষম করা হচ্ছে

ডিভাইস পরিচালনা সক্ষম করতে, নিম্নলিখিত uses-features ঘোষণা করা হয়েছে তা নিশ্চিত করুন:

  • android.software.device_admin
  • android.software.managed_users (যদি এবং শুধুমাত্র ডিভাইসটিতে কমপক্ষে 2 GB মেমরি থাকে তবে বৈশিষ্ট্যটি ঘোষণা করা হয়।)

একটি ডিভাইসে এই uses-feature মানগুলি ঘোষণা করা হয়েছে তা নিশ্চিত করতে, চালান: adb shell pm list features

শুধুমাত্র প্রয়োজনীয় অ্যাপ

ডিফল্টরূপে, প্রোফাইলের সঠিক ক্রিয়াকলাপের জন্য প্রয়োজনীয় অ্যাপ্লিকেশনগুলিকে একটি পরিচালিত ডিভাইসের ব্যবস্থা করার অংশ হিসাবে সক্ষম করা হয়৷ মনে রাখবেন, নীচের _managed_profile.xml ফাইলগুলির সমস্ত উদাহরণ শুধুমাত্র android.software.managed_users ঘোষণা করা হলেই প্রাসঙ্গিক। OEMগুলিকে অবশ্যই নিশ্চিত করতে হবে যে পরিচালিত প্রোফাইল বা ডিভাইসে সমস্ত প্রয়োজনীয় অ্যাপ্লিকেশনগুলি সংশোধন করে রয়েছে:

vendor_required_apps_managed_profile.xml
vendor_required_apps_managed_device.xml
vendor_disallowed_apps_managed_profile.xml
vendor_disallowed_apps_managed_device.xml
/*
 * The following are for Android 9 and higher only
 */
vendor_required_apps_managed_user.xml
vendor_disallowed_apps_managed_user.xml

পরিচালিত ব্যবহারকারীদের জন্য প্রয়োজনীয় এবং অননুমোদিত অ্যাপগুলি DevicePolicyManager#createAndManageUser এর মাধ্যমে তৈরি গৌণ ব্যবহারকারীদের জন্য প্রয়োগ করা হয়।

একটি Nexus ডিভাইস থেকে উদাহরণ

Android 8.x এবং তার আগের

pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml

Android 9 এবং উচ্চতর

frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources>
  <!-- A list of apps to be retained on the managed device -->
  <string-array name="vendor_required_apps_managed_device">
    <item>com.android.vending</item> <!--­Google Play -->
    <item>com.google.android.gms</item> <!--­Required by Play -->
    <item>com.google.android.contacts</item> <!--­Google or OEM Contacts­-->
    <item>com.google.android.googlequicksearchbox</item> <!--­Google Launcher -->
    <item>com.google.android.launcher</item> <!--­Google Launcher or OEM Launcher -->
    <item>com.google.android.dialer</item> <!--­Google or OEM dialer to enable making phone calls -->
  </string-array>
</resources>

Android 8.x এবং তার আগের

packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml

Android 9 এবং উচ্চতর

frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources>
    <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. -->
    <string-array name="vendor_required_apps_managed_profile">
        <item>com.android.vending</item> <!-- Google Play -->
        <item>com.google.android.gms</item> <!-- Required by Play -->
        <item>com.google.android.contacts</item> <!-- Google or OEM Contacts -->
    </string-array>
</resources>

লঞ্চারের প্রয়োজনীয়তা

আইকন ব্যাজ (পরিচালিত অ্যাপ্লিকেশনগুলিকে প্রতিনিধিত্ব করার জন্য AOSP-এ দেওয়া) এবং সাম্প্রতিক এবং বিজ্ঞপ্তিগুলির মতো অন্যান্য ব্যাজ ব্যবহারকারী ইন্টারফেস উপাদানগুলির সাথে ব্যাজিং অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য আপনাকে অবশ্যই লঞ্চার আপডেট করতে হবে৷ আপনি যদি পরিবর্তন ছাড়াই AOSP-এ লঞ্চার 3 ব্যবহার করেন, তাহলে সম্ভবত আপনি ইতিমধ্যেই এই ব্যাজিং বৈশিষ্ট্যটিকে সমর্থন করছেন৷

NFC প্রয়োজনীয়তা

এনএফসি সহ ডিভাইসগুলিকে অবশ্যই এনএফসি সক্ষম করতে হবে আউট-অফ-দ্য-বক্স অভিজ্ঞতার সময় (যেমন, সেটআপ উইজার্ড) এবং ম্যানেজড প্রভিশনিং ইন্টেন্ট গ্রহণ করার জন্য কনফিগার করা উচিত:

packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool>
<item>application/com.android.managedprovisioning</item>

সেটআপ প্রয়োজনীয়তা

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

সেটআপের প্রয়োজনীয়তা পূরণ করতে, ডিভাইস সেটআপের প্রধান কার্যকলাপে নিম্নলিখিত কোড যোগ করুন:

@Override
   protected void onStart() {
        super.onStart();

        // When returning to a setup wizard activity, check to see if another setup process
        // has intervened and, if so, complete an orderly exit
        boolean completed = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
        if (completed) {
           startActivity(new Intent(Intent.ACTION_MAIN, null)
                .addCategory(Intent.CATEGORY_HOME)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK
                        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED));
           finish();
       }

       ...
   }