लॉक टास्क मोड

इस डेवलपर की गाइड में बताया गया है कि खास तरह के डिवाइसों को एक बार में लॉक कैसे किया जा सकता है का उपयोग करते हैं. अगर आप एंटरप्राइज़ मोबिलिटी मैनेजमेंट (ईएमएम) हैं डेवलपर या सलूशन इंटिग्रेटर ने ऐप्लिकेशन में लॉक टास्क मोड जोड़ने के लिए यह गाइड पढ़ी है समाधान.

खास जानकारी

Android, लॉक टास्क मोड है. अगर कोई कीऑस्क ऐप्लिकेशन डेवलप किया जा रहा है, तो टास्क मोड को लॉक करने की सुविधा का इस्तेमाल किया जा सकता है या ऐप्लिकेशन का संग्रह प्रज़ेंट करने के लिए लॉन्चर. जब सिस्टम में लॉक टास्क चलता है मोड, डिवाइस इस्तेमाल करने वाले लोग आम तौर पर सूचनाएं नहीं देख सकते. ऐसी सूचनाएं जो सूची में नहीं हैं उन्हें ऐक्सेस करने की अनुमति नहीं है ऐप्लिकेशन या होम स्क्रीन पर वापस जाएं (जब तक कि होम स्क्रीन को अनुमति वाली सूची में शामिल न किया गया हो).

सिर्फ़ वे ऐप्लिकेशन चलाए जा सकते हैं जिन्हें डिवाइस नीति कंट्रोलर (डीपीसी) ने अनुमति वाली सूची में शामिल किया है जब सिस्टम लॉक टास्क मोड में हो. ऐप्लिकेशन को अनुमति वाली सूची में शामिल किया गया है, क्योंकि वह व्यक्ति ज़रूरी नहीं है कि डिवाइस का इस्तेमाल करने से लॉक करने के टास्क मोड को हमेशा के लिए छोड़ा जा सके.

लॉक टास्क मोड और अनुमति वाली सूची में शामिल DPC के लिए, अनुमति वाली सूची में शामिल ऐप्लिकेशन को कैसे जोड़ा जाता है यह इस बात पर निर्भर करेगा कि आपको किस समस्या को हल करना है. यहां कुछ उदाहरण दिए गए हैं:

  • सिंगल ऐप्लिकेशन पैकेज, जिसमें कीऑस्क (कॉन्टेंट पेश करने के लिए) और मिनी DPC शामिल होता है (लॉक टास्क मोड के लिए अनुमति वाली सूची में शामिल होना).
  • यह एक DPC है, जो एंटरप्राइज़ मोबिलिटी मैनेजमेंट समाधान का हिस्सा है. ग्राहक के मोबाइल ऐप्लिकेशन को लॉक करने के टास्क मोड में.

उपलब्धता

सिस्टम Android 5.0 या उसके बाद के वर्शन में लॉक टास्क मोड में चल सकता है. टेबल 1 के शो Android के कौनसे वर्शन, उपयोगकर्ता के हिसाब से ऐप्लिकेशन को अनुमति वाली सूची में जोड़ने की सुविधा देते हैं.

टेबल 1. DPC के एडमिन मोड के लिए Android वर्शन की सुविधा
Android वर्शन DPC एडमिन नोट
Android 5.0 (एपीआई लेवल 21) या इसके बाद वाला वर्शन पूरी तरह से मैनेज किया गया डिवाइस
Android 8.0 (एपीआई लेवल 26) या इसके बाद का वर्शन सहयोगी (अफ़िलिएट) का सेकंडरी यूज़र सेकंडरी उपयोगकर्ता, मुख्य उपयोगकर्ता से जुड़ा होना चाहिए. यहां जाएं: एक से ज़्यादा उपयोगकर्ता की खास जानकारी देखें.
Android 9.0 (एपीआई लेवल 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)

Java

// 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 (एपीआई लेवल 28) या उसके बाद के वर्शन में, किसी अन्य ऐप्लिकेशन की गतिविधि को लॉक टास्क मोड पर टैप करें. अगर कोई गतिविधि पहले से ही फ़ोरग्राउंड में चल रही है या बैकग्राउंड में, आपको गतिविधि फिर से लॉन्च करनी होगी. कॉल करें 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())
}

Java

// 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());
}

Android 9.0 से पहले के वर्शन में, कोई ऐप्लिकेशन लॉक टास्क में अपनी गतिविधियां शुरू करता है Activity.startLockTask() पर कॉल करके मोड का इस्तेमाल करें. इसे कॉल करने के लिए तरीका है, तो गतिविधि फ़ोरग्राउंड में चलनी चाहिए (गतिविधि-लाइफ़साइकल) कॉन्सेप्ट) शामिल करके, हमारा सुझाव है कि onResume() तरीका: Activity या Fragment. 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.
    }
}

Java

// 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 ऐप्लिकेशन पैकेज को अनुमति वाली सूची में शामिल है. कॉल करें DevicePolicyManager.setLockTaskPackages(), इंच Android 6.0 (एपीआई लेवल 23) या इसके बाद के वर्शन में उपलब्ध है. साथ ही, पैकेज के नाम को अनुमति वाली सूची में शामिल कलेक्शन. अनुमति वाले ऐप्लिकेशन की सूची को अपडेट करने पर, यह ऐप्लिकेशन वापस पिछले वर्शन पर वापस आ जाता है टास्क पर क्लिक करें.

अगर गतिविधि के लिए पहले 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 ...
}

Java

// 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 ...
}

यूज़र इंटरफ़ेस (यूआई) को पसंद के मुताबिक बनाना

जब कोई ऐप्लिकेशन लॉक टास्क मोड में चलता है, तो सिस्टम का यूज़र इंटरफ़ेस (यूआई) नीचे दिए गए तरीकों से:

  • स्टेटस बार खाली होता है. इसमें सूचनाएं और सिस्टम की जानकारी छिपी हुई होती है.
  • होम और खास जानकारी बटन छिपे हुए हैं.
  • अन्य ऐप्लिकेशन में, नई गतिविधियां नहीं हो सकतीं.
  • लॉक स्क्रीन (अगर सेट हो) बंद होती है.

लॉक टास्क मोड चालू होने पर, Android 9.0 या इसके बाद वाले वर्शन में, DPC इन्हें चालू कर सकता है डिवाइस पर कुछ सिस्टम यूज़र इंटरफ़ेस (यूआई) फ़ीचर—जो डेवलपर के लिए काम के हैं. लॉन्चर. कॉल करें 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)

Java

// 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 आर्ग्युमेंट में शामिल नहीं किया. कॉन्टेंट बनाने चालू यूज़र इंटरफ़ेस (यूआई) सुविधाएं, लॉक टास्क मोड में लॉन्च होने के दौरान भी लागू रहती हैं. अगर डिवाइस पहले से ही लॉक टास्क मोड में है, इसलिए टास्क को लॉक करने की सुविधाओं में जो भी बदलाव किए जाएंगे तुरंत दिखाएं. दूसरी टेबल में यूज़र इंटरफ़ेस (यूआई) की उन सुविधाओं के बारे में बताया गया है जिन्हें अपनी पसंद के मुताबिक बनाया जा सकता है.

टेबल 2. लॉक टास्क मोड में, पसंद के मुताबिक बनाई जा सकने वाली सिस्टम यूज़र इंटरफ़ेस (यूआई) की सुविधाएं
सिस्टम यूज़र इंटरफ़ेस (यूआई) की सुविधा ब्यौरा
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 ऊपर दी गई सूची में शामिल सिस्टम यूज़र इंटरफ़ेस (यूआई) की सभी सुविधाएं बंद करता है.

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)
}

Java

// 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 उपयोगकर्ता की पाबंदी को हटा सकता है.

अन्य संसाधन

खास तरह के डिवाइसों के बारे में ज़्यादा जानने के लिए, ये दस्तावेज़ पढ़ें: