টাস্ক মোড লক করুন

এই বিকাশকারীর নির্দেশিকা ব্যাখ্যা করে যে কীভাবে ডেডিকেটেড ডিভাইসগুলি একটি একক অ্যাপ বা অ্যাপের সেটে লক করা যেতে পারে। আপনি যদি একজন এন্টারপ্রাইজ মোবিলিটি ম্যানেজমেন্ট (EMM) ডেভেলপার বা সমাধান ইন্টিগ্রেটর হন তাহলে আপনার সমাধানে লক টাস্ক মোড যোগ করতে এই গাইডটি পড়ুন।

ওভারভিউ

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

যখন সিস্টেমটি লক টাস্ক মোডে থাকে তখন শুধুমাত্র ডিভাইস পলিসি কন্ট্রোলার (DPC) দ্বারা অনুমোদিত অ্যাপ্লিকেশানগুলি চলতে পারে৷ অ্যাপগুলিকে অনুমতি দেওয়া হয়েছে কারণ যে ব্যক্তি ডিভাইস ব্যবহার করছেন তিনি সবসময় লক টাস্ক মোড ছেড়ে যেতে পারেন না।

আপনি কীভাবে লক টাস্ক মোডের জন্য অনুমোদিত তালিকাভুক্ত অ্যাপটিকে একত্রিত করবেন এবং অনুমোদিত তালিকাভুক্ত ডিপিসি আপনি যে সমস্যার সমাধান করতে চান তার উপর নির্ভর করবে। এখানে কিছু উদাহরণ আছে:

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

প্রাপ্যতা

সিস্টেমটি Android 5.0 বা তার পরবর্তী সংস্করণে লক টাস্ক মোডে চলতে পারে। সারণী 1 দেখায় যে Android এর কোন সংস্করণগুলি ব্যবহারকারীর দ্বারা অ্যাপগুলিকে তালিকাভুক্ত করার অনুমতি দেয়৷

টেবিল 1 । DPC অ্যাডমিন মোডের জন্য অ্যান্ড্রয়েড সংস্করণ সমর্থন
অ্যান্ড্রয়েড সংস্করণ ডিপিসি প্রশাসক নোট
Android 5.0 (API স্তর 21) বা উচ্চতর সম্পূর্ণরূপে পরিচালিত ডিভাইস
Android 8.0 (API স্তর 26) বা উচ্চতর অধিভুক্ত সেকেন্ডারি ব্যবহারকারী মাধ্যমিক ব্যবহারকারীকে অবশ্যই প্রাথমিক ব্যবহারকারীর সাথে সংযুক্ত হতে হবে। একাধিক ব্যবহারকারীর ওভারভিউ দেখুন।
Android 9.0 (API স্তর 28) বা উচ্চতর মাধ্যমিক ব্যবহারকারী

অ্যান্ড্রয়েড 9.0 বা তার পরে একটি ডিপিসি লক টাস্ক মোডে যেকোনো অ্যাপের কার্যকলাপ শুরু করতে পারে। পূর্ববর্তী সংস্করণগুলিতে, অ্যাপটিকে ইতিমধ্যেই লক টাস্ক মোডে নিজস্ব কার্যকলাপ শুরু করতে সমর্থন করতে হবে।

অ্যালোলিস্ট অ্যাপ

লক টাস্ক মোডে ব্যবহার করার আগে একটি DPC-কে অবশ্যই অ্যাপ্লিকেশানগুলিকে অনুমতি দিতে হবে৷ নিম্নলিখিত নমুনায় দেখানো হিসাবে লক টাস্ক মোডের জন্য অ্যাপ্লিকেশানগুলিকে অনুমতি দিতে DevicePolicyManager.setLockTaskPackages() এ কল করুন:

কোটলিন

// Allowlist two apps.
private val KIOSK_PACKAGE = "com.example.kiosk"
private val PLAYER_PACKAGE = "com.example.player"
private val APP_PACKAGES = arrayOf(KIOSK_PACKAGE, PLAYER_PACKAGE)

// ...

val context = context
val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE)
        as DevicePolicyManager
val adminName = getComponentName(context)
dpm.setLockTaskPackages(adminName, APP_PACKAGES)

জাভা

// Allowlist two apps.
private static final String KIOSK_PACKAGE = "com.example.kiosk";
private static final String PLAYER_PACKAGE = "com.example.player";
private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE};

// ...

Context context = getContext();
DevicePolicyManager dpm =
    (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminName = getComponentName(context);
dpm.setLockTaskPackages(adminName, APP_PACKAGES);

লক টাস্ক মোডের জন্য পূর্বে অনুমোদিত অ্যাপগুলি খুঁজে বের করতে, একটি DPC DevicePolicyManager.getLockTaskPackages() কল করতে পারে৷ অন্য অ্যাপগুলি DevicePolicyManager.isLockTaskPermitted() কল করে নিশ্চিত করতে পারে যে একটি অ্যাপ প্যাকেজ লক টাস্ক মোড সমর্থন করে।

লক টাস্ক মোড শুরু করুন

Android 9.0 (API স্তর 28) বা উচ্চতর, আপনি লক টাস্ক মোডে অন্য অ্যাপের কার্যকলাপ শুরু করতে পারেন। যদি একটি অ্যাক্টিভিটি ইতিমধ্যেই ফোরগ্রাউন্ড বা ব্যাকগ্রাউন্ডে চলছে, তাহলে আপনাকে অ্যাক্টিভিটি আবার লঞ্চ করতে হবে। ActivityOptions.setLockTaskEnabled() কল করুন এবং কার্যকলাপ শুরু করার সময় এই বিকল্পগুলি সরবরাহ করুন৷ নিম্নলিখিত স্নিপেটটি দেখায় যে আপনি এটি করতে পারেন:

কোটলিন

// Set an option to turn on lock task mode when starting the activity.
val options = ActivityOptions.makeBasic()
options.setLockTaskEnabled(true)

// Start our kiosk app's main activity with our lock task mode option.
val packageManager = context.packageManager
val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE)
if (launchIntent != null) {
    context.startActivity(launchIntent, options.toBundle())
}

জাভা

// Set an option to turn on lock task mode when starting the activity.
ActivityOptions options = ActivityOptions.makeBasic();
options.setLockTaskEnabled(true);

// Start our kiosk app's main activity with our lock task mode option.
PackageManager packageManager = context.getPackageManager();
Intent launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE);
if (launchIntent != null) {
  context.startActivity(launchIntent, options.toBundle());
}

9.0 এর আগে অ্যান্ড্রয়েড সংস্করণে, একটি অ্যাপ Activity.startLockTask() কল করে লক টাস্ক মোডে তার নিজস্ব কার্যকলাপ শুরু করে। এই পদ্ধতিতে কল করার জন্য, অ্যাক্টিভিটি অবশ্যই ফোরগ্রাউন্ডে চলতে হবে ( অ্যাক্টিভিটি-লাইফসাইকেল ধারণাগুলি দেখুন) তাই আমরা একটি Activity বা Fragment onResume() পদ্ধতিতে কল করার পরামর্শ দিই। এখানে আপনি কিভাবে startLockTask() কল করতে পারেন:

কোটলিন

// In our Fragment subclass.
override fun onResume() {
    super.onResume()
    // First, confirm that this package is allowlisted to run in lock task mode.
    if (dpm.isLockTaskPermitted(context.packageName)) {
        activity.startLockTask()
    } else {
        // Because the package isn't allowlisted, calling startLockTask() here
        // would put the activity into screen pinning mode.
    }
}

জাভা

// In our Fragment subclass.
@Override
public void onResume() {
  super.onResume();

  // First, confirm that this package is allowlisted to run in lock task mode.
  if (dpm.isLockTaskPermitted(context.getPackageName())) {
    getActivity().startLockTask();
  } else {
    // Because the package isn't allowlisted, calling startLockTask() here
    // would put the activity into screen pinning mode.
  }
}

ডিভাইসটি লক থাকা অবস্থায় লক টাস্ক মোড শুরু করবেন না কারণ ব্যবহারকারী ডিভাইসটি আনলক করতে সক্ষম নাও হতে পারে। ডিভাইসটি লক করা আছে কিনা তা জানতে আপনি KeyguardManager পদ্ধতিতে কল করতে পারেন এবং লক টাস্ক মোড শুরু করতে একটি Activity লাইফসাইকেল কলব্যাক (যেমন onResume() যা আনলক করার পরে বলা হয়) ব্যবহার করতে পারেন।

লক টাস্ক মোডে থাকা একটি অ্যাপ নতুন অ্যাক্টিভিটি শুরু করতে পারে যতক্ষণ না অ্যাক্টিভিটি একটি নতুন টাস্ক শুরু না করে—একটি অনুমোদিত অ্যাপ্লিকেশান লঞ্চ করা কাজগুলি ছাড়া৷ কার্যগুলি কীভাবে ক্রিয়াকলাপের সাথে সম্পর্কিত তা বোঝার জন্য, কার্যাবলী এবং ব্যাক স্ট্যাক বুঝতে নির্দেশিকাটি পড়ুন।

বিকল্পভাবে, আপনি আপনার অ্যাপ ম্যানিফেস্ট ফাইলে ঘোষণা করতে পারেন যে যখন সিস্টেমটি লক টাস্ক মোডে চলছে তখন একটি কার্যকলাপ কীভাবে আচরণ করা উচিত। সিস্টেমটি স্বয়ংক্রিয়ভাবে লক টাস্ক মোডে আপনার অ্যাক্টিভিটি চালাতে, android:lockTaskMode অ্যাট্রিবিউটটিকে if_whitelisted এ সেট করুন যেমন নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<activity
    android:name=".MainActivity"
    android:lockTaskMode="if_whitelisted">
    <!-- ... -->
</activity>

আপনি lockTaskMode রেফারেন্স পড়ে অ্যাপ ম্যানিফেস্ট ফাইলে বিকল্প ঘোষণা করার বিষয়ে আরও জানতে পারেন।

লক টাস্ক মোড বন্ধ করুন

একটি DPC অনুমতি তালিকা থেকে অ্যাপ প্যাকেজটি সরিয়ে দূরবর্তীভাবে লক টাস্ক মোড বন্ধ করতে পারে। Android 6.0 (API লেভেল 23) বা তার পরবর্তী সংস্করণে DevicePolicyManager.setLockTaskPackages() এ কল করুন এবং অনুমোদিত অ্যারে থেকে প্যাকেজের নাম বাদ দিন। আপনি অনুমোদিত তালিকা আপডেট করলে, অ্যাপটি স্ট্যাকের আগের টাস্কে ফিরে আসে।

যদি কোনো অ্যাক্টিভিটি আগে startLockTask() নামে পরিচিত হয়, তাহলে অ্যাক্টিভিটিটি Activity.stopLockTask() কে লক টাস্ক মোড বন্ধ করতে কল করতে পারে। এই পদ্ধতিটি শুধুমাত্র সেই কার্যকলাপের জন্য কাজ করে যা লক টাস্ক মোড শুরু করেছে।

লাইফসাইকেল কলব্যাক

একটি অ্যাপ (একই ব্যবহারকারীর মধ্যে চলমান) কখন লক টাস্ক মোডে প্রবেশ করে এবং প্রস্থান করে তা জানতে আপনার DPC এটি দরকারী বলে মনে করতে পারে। কলব্যাক গ্রহণ করতে, আপনার DPC এর DeviceAdminReceiver সাবক্লাসে নিম্নলিখিত কলব্যাক পদ্ধতিগুলিকে ওভাররাইড করুন:

onLockTaskModeEntering()
একটি অ্যাপ লক টাস্ক মোডে প্রবেশ করার পরে কল করা হয়। আপনি pkg আর্গুমেন্ট থেকে একটি অ্যাপের প্যাকেজ নাম পেতে পারেন।
onLockTaskModeExiting()
একটি অ্যাপ লক টাস্ক মোড থেকে প্রস্থান করার পরে কল করা হয়। এই কলব্যাক অ্যাপ সম্পর্কে তথ্য পায় না।

আপনি লক টাস্ক মোডে অন্য অ্যাপ চালু করলে, আপনার নিজের অ্যাপে চলমান অবস্থা ট্র্যাক করতে হবে। বর্তমান অ্যাপটি লক টাস্ক মোডে চলছে কিনা তা পরীক্ষা করতে, নিম্নলিখিত উদাহরণে দেখানো ActivityManager পদ্ধতিগুলি ব্যবহার করুন:

কোটলিন

// Check if this app is in lock task mode. Screen pinning doesn't count.
var isLockTaskModeRunning = false

val activityManager = context
        .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    isLockTaskModeRunning =
            activityManager.lockTaskModeState ==
            ActivityManager.LOCK_TASK_MODE_LOCKED
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Deprecated in API level 23.
    isLockTaskModeRunning = activityManager.isInLockTaskMode
}

if (isLockTaskModeRunning) {
    // Show the exit button ...
}

জাভা

// Check if this app is in lock task mode. Screen pinning doesn't count.
boolean isLockTaskModeRunning = false;

ActivityManager activityManager = (ActivityManager)
    getContext().getSystemService(Context.ACTIVITY_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  isLockTaskModeRunning = activityManager.getLockTaskModeState()
      == ActivityManager.LOCK_TASK_MODE_LOCKED;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  // Deprecated in API level 23.
  isLockTaskModeRunning = activityManager.isInLockTaskMode();
}

if (isLockTaskModeRunning) {
  // Show the exit button ...
}

UI কাস্টমাইজ করুন

যখন একটি অ্যাপ লক টাস্ক মোডে চলে, তখন সিস্টেম ইউজার ইন্টারফেস (UI) নিম্নলিখিত উপায়ে পরিবর্তিত হয়:

  • বিজ্ঞপ্তি এবং সিস্টেম তথ্য লুকানো সহ স্ট্যাটাস বার ফাঁকা।
  • হোম এবং ওভারভিউ বোতাম লুকানো আছে.
  • অন্যান্য অ্যাপ্লিকেশানগুলি নতুন কার্যকলাপ চালু করতে পারে না৷
  • লক স্ক্রীন (যদি সেট করা থাকে) অক্ষম করা আছে।

Android 9.0 বা উচ্চতর সংস্করণে যখন লক টাস্ক মোড সক্ষম থাকে, তখন আপনার DPC ডিভাইসে নির্দিষ্ট সিস্টেম UI বৈশিষ্ট্যগুলিকে সক্ষম করতে পারে - একটি কাস্টম লঞ্চার তৈরিকারী বিকাশকারীদের জন্য দরকারী৷ নিম্নলিখিত স্নিপেটে দেখানো হিসাবে DevicePolicyManager.setLockTaskFeatures() কে কল করুন:

কোটলিন

// Enable the Home and Overview buttons so that our custom launcher can respond
// using our custom activities. Implicitly disables all other features.
dpm.setLockTaskFeatures(
        adminName,
        DevicePolicyManager.LOCK_TASK_FEATURE_HOME or
              DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW)

জাভা

// Enable the Home and Overview buttons so that our custom launcher can respond
// using our custom activities. Implicitly disables all other features.
dpm.setLockTaskFeatures(adminName,
    DevicePolicyManager.LOCK_TASK_FEATURE_HOME |
          DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);

সিস্টেমটি এমন কোনো বৈশিষ্ট্য অক্ষম করে যা আপনি flags আর্গুমেন্টে অন্তর্ভুক্ত করেন না। সক্রিয় UI বৈশিষ্ট্যগুলি লক টাস্ক মোডে লঞ্চের মধ্যে টিকে থাকে৷ যদি ডিভাইসটি ইতিমধ্যেই লক টাস্ক মোডে থাকে, লক টাস্ক বৈশিষ্ট্যগুলিতে আপনি যে কোনও পরিবর্তন করেন তা অবিলম্বে প্রদর্শিত হয়৷ সারণি 2 UI বৈশিষ্ট্যগুলি বর্ণনা করে যা আপনি কাস্টমাইজ করতে পারেন৷

টেবিল 2 । লক টাস্ক মোডে কাস্টমাইজযোগ্য সিস্টেম UI বৈশিষ্ট্য
সিস্টেম UI বৈশিষ্ট্য বর্ণনা
LOCK_TASK_FEATURE_HOME হোম বোতাম দেখায়। কাস্টম লঞ্চারগুলির জন্য সক্ষম করুন—আপনি ডিফল্ট অ্যান্ড্রয়েড লঞ্চারকে অনুমতি না দেওয়া পর্যন্ত একটি সক্রিয় হোম বোতামে আলতো চাপ দিলে কোনও কাজ নেই৷
LOCK_TASK_FEATURE_OVERVIEW ওভারভিউ বোতামটি দেখায় (এই বোতামটি আলতো চাপলে সাম্প্রতিক স্ক্রিন খোলে)। আপনি যদি এই বোতামটি সক্ষম করেন তবে আপনাকে অবশ্যই হোম বোতামটি সক্ষম করতে হবে৷
LOCK_TASK_FEATURE_GLOBAL_ACTIONS গ্লোবাল অ্যাকশন ডায়ালগ সক্ষম করে যা পাওয়ার বোতামটি দীর্ঘ-টিপলে দেখায়। setLockTaskFeatures() কল করা না হলে একমাত্র বৈশিষ্ট্যটি সক্ষম হয়। আপনি যদি এই ডায়ালগটি অক্ষম করেন তবে একজন ব্যবহারকারী সাধারণত ডিভাইসটি বন্ধ করতে পারে না৷
LOCK_TASK_FEATURE_NOTIFICATIONS সমস্ত অ্যাপের জন্য বিজ্ঞপ্তি সক্ষম করে৷ এটি স্ট্যাটাস বারে বিজ্ঞপ্তি আইকন, হেড-আপ বিজ্ঞপ্তি এবং প্রসারণযোগ্য বিজ্ঞপ্তি শেড দেখায়। আপনি যদি এই বোতামটি সক্ষম করেন তবে আপনাকে অবশ্যই হোম বোতামটি সক্ষম করতে হবে৷ নোটিফিকেশন অ্যাকশন এবং বোতাম ট্যাপ করা যা নতুন প্যানেল খোলে, তা লক টাস্ক মোডে কাজ করে না।
LOCK_TASK_FEATURE_SYSTEM_INFO স্থিতি বারের সিস্টেম তথ্য এলাকা সক্ষম করে যাতে সংযোগ, ব্যাটারি এবং শব্দ এবং কম্পন বিকল্পগুলির মতো সূচক রয়েছে৷
LOCK_TASK_FEATURE_KEYGUARD ডিভাইসে সেট করা হতে পারে এমন যেকোনো লক স্ক্রিন সক্ষম করে। তথ্য কিয়স্ক বা ডিজিটাল সাইনেজের মতো সর্বজনীন ব্যবহারকারীর ডিভাইসগুলির জন্য সাধারণত উপযুক্ত নয়৷
LOCK_TASK_FEATURE_NONE উপরে তালিকাভুক্ত সমস্ত সিস্টেম UI বৈশিষ্ট্যগুলি অক্ষম করে৷

লক টাস্ক মোড সক্রিয় থাকা অবস্থায় একটি ডিভাইসে উপলব্ধ বৈশিষ্ট্যগুলির তালিকা পেতে একটি DPC DevicePolicyManager.getLockTaskFeatures() কল করতে পারে৷ যখন একটি ডিভাইস লক টাস্ক মোড থেকে প্রস্থান করে, ব্যবহারকারী ইন্টারফেস বিদ্যমান ডিভাইস নীতি দ্বারা বাধ্যতামূলক অবস্থায় ফিরে আসে।

উইন্ডো এবং ওভারলে ব্লক করুন

যখন একটি অ্যাপ লক টাস্ক মোডে চলে, তখন অন্যান্য অ্যাপ এবং ব্যাকগ্রাউন্ড পরিষেবা নতুন উইন্ডো তৈরি করতে পারে যা Android অ্যাপের সামনে লক টাস্ক মোডে প্রদর্শন করে। অ্যাপস এবং পরিষেবাগুলি ডিভাইস ব্যবহারকারী ব্যক্তিকে টোস্ট, ডায়ালগ এবং ওভারলে দেখানোর জন্য এই উইন্ডোগুলি তৈরি করে৷ আপনার DPC DISALLOW_CREATE_WINDOWS ব্যবহারকারী সীমাবদ্ধতা যোগ করে এগুলি প্রতিরোধ করতে পারে৷ নিচের উদাহরণটি দেখায় কিভাবে আপনি onLockTaskModeEntering() কলব্যাকে এটি করতে পারেন:

কোটলিন

// Called just after entering lock task mode.
override fun onLockTaskModeEntering(context: Context, intent: Intent) {
    val dpm = getManager(context)
    val admin = getWho(context)

    dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS)
}

জাভা

// Called just after entering lock task mode.
public void onLockTaskModeEntering(Context context, Intent intent) {
  DevicePolicyManager dpm = getManager(context);
  ComponentName admin = getWho(context);

  dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS);
}

ডিভাইসটি লক টাস্ক মোড থেকে প্রস্থান করলে আপনার DPC ব্যবহারকারীর সীমাবদ্ধতা সরাতে পারে।

অতিরিক্ত সম্পদ

ডেডিকেটেড ডিভাইস সম্পর্কে আরও জানতে, নিম্নলিখিত নথিগুলি পড়ুন: