ডিভাইস পরিচালনা বাস্তবায়ন করা হচ্ছে

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

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

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

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

তাপীয় HAL মান

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

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

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

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

ডিভাইস ব্যবস্থাপনা সক্ষম করা

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

  • android.software.device_admin
  • android.software.managed_users (বৈশিষ্ট্য ঘোষিত হয় যদি এবং কেবল যদি ডিভাইস মেমরি অন্তত 2 গিগাবাইট আছে।)

তা নিশ্চিত করতে এই 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

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

অ্যান্ড্রয়েড 8.x এবং আগের

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

অ্যান্ড্রয়েড 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>

অ্যান্ড্রয়েড 8.x এবং আগের

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

অ্যান্ড্রয়েড 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 এ প্রদান করা হয়েছে) এবং অন্যান্য ব্যাজ ব্যবহারকারী ইন্টারফেস উপাদান যেমন রিসেন্ট এবং বিজ্ঞপ্তিগুলির সাথে ব্যাজিং অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য আপনাকে অবশ্যই লঞ্চার আপডেট করতে হবে। আপনি ব্যবহার করেন তাহলে লঞ্চার 3 পরিবর্তন ছাড়াই AOSP মধ্যে, তাহলে আপনি সম্ভবত ইতিমধ্যেই এই badging বৈশিষ্ট্য সমর্থন করে।

এনএফসি প্রয়োজনীয়তা

NFC সহ ডিভাইসগুলিকে অবশ্যই অফ-অফ-দ্য-বক্স অভিজ্ঞতার সময় 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();
       }

       ...
   }