লক টাস্ক মোড

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

এক নজরে

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

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

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

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

উপলভ্যতা

Android 5.0 বা তার পরবর্তী ভার্সনে সিস্টেম লক টাস্ক মোডে রান করতে পারে। সারণী ১-এ দেখানো হয়েছে Android-এর কোন ভার্সন ব্যবহারকারীকে অ্যাপ হোয়াইটলিস্ট করার অনুমতি দেয়।

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

Android 9.0 বা তার পরবর্তী যেকোনও ভার্সনে, DPC যেকোনও অ্যাপের অ্যাক্টিভিটি লক টাস্ক মোডে শুরু করতে পারে। আগের ভার্সনে, লক টাস্ক মোডে নিজের অ্যাক্টিভিটি শুরু করার জন্য অ্যাপটিকে আগে থেকেই উপযুক্ত হতে হবে।

অ্যাপকে সাদাতালিকায় যোগ করা

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

Kotlin

// 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 লেভেল ২৮) বা তার পরবর্তী যেকোনও ভার্সনে, আপনি লক টাস্ক মোডে অন্য অ্যাপের অ্যাক্টিভিটি শুরু করতে পারবেন। কোনও অ্যাক্টিভিটি আগে থেকেই ফোরগ্রাউন্ড বা ব্যাকগ্রাউন্ডে চলতে থাকলে, আপনাকে অ্যাক্টিভিটি আবার চালু করতে হবে। অ্যাক্টিভিটি শুরু করার সময় ActivityOptions.setLockTaskEnabled()-এ কল করুন এবং এইসব বিকল্প প্রদান করুন। নিম্নলিখিত স্নিপেট থেকে আপনি এটি করার একটি উপায় জানতে পারবেন:

Kotlin

// 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-এর আগের Android ভার্সনে, কোনও অ্যাপ Activity.startLockTask() কল করার মাধ্যমে লক টাস্ক মোডে নিজস্ব অ্যাক্টিভিটি শুরু করে। এই পদ্ধতি কল করতে, অ্যাক্টিভিটি অবশ্যই ফোরগ্রাউন্ডে চলতে হবে (অ্যাক্টিভিটি-লাইফসাইকেল ধারণা দেখুন) তাই আমরা Activity বা Fragment-এর onResume() পদ্ধতিতে কল করার সাজেশন দিই। আপনি কীভাবে startLockTask()-কে কল করতে পারবেন তা এখানে দেওয়া হল:

Kotlin

// 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 লেভেল ২৩) বা তার পরবর্তী যেকোনও ভার্সনে DevicePolicyManager.setLockTaskPackages() কল করুন এবং সাদা তালিকার অ্যারে থেকে প্যাকেজের নাম বাদ দিন। আপনি সাদাতালিকা আপডেট করলে, অ্যাপটি স্ট্যাকের আগের টাস্কে ফিরে আসে।

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

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

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

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

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

Kotlin

// 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() কল করুন:

Kotlin

// 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 ফিচারগুলি থেকে যায়। ডিভাইসটি আগে থেকেই লক টাস্ক মোডে থাকলে, লক টাস্ক ফিচারে আপনি কোনও পরিবর্তন করলে তা অবিলম্বে দেখা যাবে। সারণী ২-এ আপনি কাস্টমাইজ করতে পারবেন এমন UI ফিচার বর্ণনা করা আছে।

টেবিল ২। লক টাস্ক মোডে কাস্টমাইজ করা যায় এমন সিস্টেম UI ফিচার
সিস্টেম UI ফিচার বর্ণনা
LOCK_TASK_FEATURE_HOME হোম বোতাম দেখায়। কাস্টম লঞ্চারের জন্য চালু করুন—চালু করা হোম বোতামে ট্যাপ করলে কোনও অ্যাকশন হয় না, যদি না আপনি ডিফল্ট Android লঞ্চারকে অনুমতি তালিকায় যোগ করেন।
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() কলব্যাকে এটি করতে পারবেন:

Kotlin

// 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 ব্যবহারকারীর উপর থেকে বিধিনিষেধ সরিয়ে দিতে পারে।

অতিরিক্ত রিসোর্স

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