इस कुकबुक से डेवलपर और सिस्टम इंटिग्रेटर को, बेहतर तरीके से पढ़ाने में मदद मिलती है डिवाइस समाधान. खास तरह के डिवाइस से जुड़ी समस्याओं के समाधान पाने के लिए, 'कैसे करें' रेसिपी देखें व्यवहार. यह कुकबुक उन डेवलपर के लिए सबसे सही है जिनके पास पहले से ही डिवाइस ऐप्लिकेशन—अगर आपने अभी-अभी शुरुआत की है, तो खास तरह के डिवाइस खास जानकारी पर टैप करें.
पसंद के मुताबिक होम ऐप
अगर आप Android Home की जगह कोई ऐप्लिकेशन डेवलप कर रहे हैं, तो ये रेसिपी काम की हैं लॉन्चर खोलें.
होम स्क्रीन पर दिखने वाले ऐप्लिकेशन
अपने ऐप्लिकेशन को डिवाइस के होम ऐप्लिकेशन के तौर पर सेट किया जा सकता है, ताकि वह लॉन्च हो सके डिवाइस के चालू होने पर, अपने-आप चालू हो जाता है. आप चाहें, तो होम पेज को चालू करें बटन जो अनुमति वाली सूची में शामिल आपके ऐप्लिकेशन को लॉक स्क्रीन पर दिखाता है टास्क मोड पर काम करता है.
होम के सभी ऐप्लिकेशन में CATEGORY_HOME
इंटेंट कैटगरी को मैनेज किया जाता है—यह
इसी तरीके से सिस्टम किसी होम ऐप्लिकेशन की पहचान करता है. डिफ़ॉल्ट होम ऐप्लिकेशन बनने के लिए, किसी एक को सेट करें
आपके ऐप्लिकेशन पर की जाने वाली गतिविधियों को, इस नंबर पर कॉल करके:
DevicePolicyManager.addPersistentPreferredActivity()
जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
Kotlin
// Create an intent filter to specify the Home category. val filter = IntentFilter(Intent.ACTION_MAIN) filter.addCategory(Intent.CATEGORY_HOME) filter.addCategory(Intent.CATEGORY_DEFAULT) // Set the activity as the preferred option for the device. val activity = ComponentName(context, KioskModeActivity::class.java) val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager dpm.addPersistentPreferredActivity(adminName, filter, activity)
Java
// Create an intent filter to specify the Home category. IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_HOME); filter.addCategory(Intent.CATEGORY_DEFAULT); // Set the activity as the preferred option for the device. ComponentName activity = new ComponentName(context, KioskModeActivity.class); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); dpm.addPersistentPreferredActivity(adminName, filter, activity);
आपको अब भी इंटेंट फ़िल्टर का एलान करना होगा जैसा कि नीचे दिए गए एक्सएमएल स्निपेट में दिखाया गया है:
<activity
android:name=".KioskModeActivity"
android:label="@string/kiosk_mode"
android:launchMode="singleInstance"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
आम तौर पर, आपको खास जानकारी वाली स्क्रीन में लॉन्चर ऐप्लिकेशन को नहीं दिखाना है.
हालांकि, आपको excludeFromRecents
को जोड़ने की ज़रूरत नहीं है
गतिविधि का एलान, क्योंकि Android का Launcher, पहली बार लॉन्च की गई
सिस्टम के लॉक टास्क मोड में चलने के दौरान गतिविधि.
अलग-अलग टास्क दिखाएं
FLAG_ACTIVITY_NEW_TASK
इनके लिए काम का फ़्लैग हो सकता है
लॉन्चर-टाइप ऐप्स क्योंकि प्रत्येक नया टास्क एक अलग आइटम के रूप में
खास जानकारी वाली स्क्रीन. खास जानकारी वाली स्क्रीन पर, टास्क के बारे में ज़्यादा जानने के लिए, हाल ही के टास्क देखें
स्क्रीन.
सार्वजनिक कीऑस्क
ये रेसिपी, उन डिवाइसों पर भी बेहतरीन तरीके से काम करती हैं जिनका जवाब सार्वजनिक जगहों पर मौजूद नहीं है. हालांकि, इनका इस्तेमाल करके कई डिवाइस उपयोगकर्ताओं को अपने काम पर फ़ोकस करने में मदद मिलती है.
डिवाइस लॉक करें
यह पक्का करने के लिए कि डिवाइसों का इस्तेमाल उनके असल काम के लिए किया जाए, टेबल में दी गई, उपयोगकर्ता की पाबंदियों के बारे में बताया गया है.
उपयोगकर्ता प्रतिबंध | ब्यौरा |
---|---|
DISALLOW_FACTORY_RESET |
डिवाइस उपयोगकर्ता को डिवाइस को उसके फैक्ट्री डिफ़ॉल्ट पर रीसेट करने से रोकता है. पूरी तरह से मैनेज किए जा रहे डिवाइसों के एडमिन और प्राइमरी यूज़र इसे सेट कर सकते हैं प्रतिबंध. |
DISALLOW_SAFE_BOOT |
डिवाइस इस्तेमाल करने वाले व्यक्ति को इतनी देर में डिवाइस चालू करने से रोकता है सुरक्षित मोड जहां सिस्टम आपके ऐप्लिकेशन को अपने-आप लॉन्च नहीं करेगा. पूरी तरह से मैनेज किए जा रहे डिवाइस और प्राइमरी यूज़र, इस पाबंदी को सेट कर सकते हैं. |
DISALLOW_MOUNT_PHYSICAL_MEDIA |
यह डिवाइस के उपयोगकर्ताओं को उन स्टोरेज वॉल्यूम को माउंट करने से रोकता है जिन्हें वे इंस्टॉल कर सकते हैं डिवाइस से अटैच करें. पूरी तरह से मैनेज किए जा रहे डिवाइसों के एडमिन और मुख्य उपयोगकर्ता पर यह पाबंदी सेट की जा सकती है. |
DISALLOW_ADJUST_VOLUME |
डिवाइस को म्यूट कर दिया जाता है और डिवाइस के उपयोगकर्ता को आवाज़ बदलने से रोका जाता है वॉल्यूम और वाइब्रेशन सेटिंग. यह देखें कि आपके कीऑस्क पर ऑडियो की ज़रूरत नहीं है या सुलभता सुविधाएं इस्तेमाल करने के लिए. पूरी तरह से मैनेज की गई कंपनी के एडमिन इसे डिवाइस, मुख्य उपयोगकर्ता, दूसरे उपयोगकर्ता, और वर्क प्रोफ़ाइल के ज़रिए सेट किया जा सकता है प्रतिबंध. |
DISALLOW_ADD_USER |
यह डिवाइस को नए उपयोगकर्ता जोड़ने से रोकता है, जैसे कि सेकंडरी उपयोगकर्ता या प्रतिबंधित उपयोगकर्ता. सिस्टम इस उपयोगकर्ता पर लगी पाबंदी को अपने-आप जोड़ देता है डिवाइस को पूरी तरह से मैनेज किया जा रहा था, लेकिन हो सकता है कि उसे मिटा दिया गया हो. पूरी तरह से मैनेज किए जा रहे डिवाइस और प्राइमरी यूज़र, इस पाबंदी को सेट कर सकते हैं. |
नीचे दिए गए स्निपेट में बताया गया है कि पाबंदियां कैसे सेट की जा सकती हैं:
Kotlin
// If the system is running in lock task mode, set the user restrictions // for a kiosk after launching the activity. arrayOf( UserManager.DISALLOW_FACTORY_RESET, UserManager.DISALLOW_SAFE_BOOT, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, UserManager.DISALLOW_ADJUST_VOLUME, UserManager.DISALLOW_ADD_USER).forEach { dpm.addUserRestriction(adminName, it) }
Java
// If the system is running in lock task mode, set the user restrictions // for a kiosk after launching the activity. String[] restrictions = { UserManager.DISALLOW_FACTORY_RESET, UserManager.DISALLOW_SAFE_BOOT, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, UserManager.DISALLOW_ADJUST_VOLUME, UserManager.DISALLOW_ADD_USER}; for (String restriction: restrictions) dpm.addUserRestriction(adminName, restriction);
ऐप्लिकेशन के एडमिन मोड में होने पर, इन पाबंदियों को हटाया जा सकता है
कि आईटी एडमिन अब भी डिवाइस के रखरखाव के लिए इन सुविधाओं का इस्तेमाल कर सकता है. हटाने के लिए
पाबंदी, कॉल
DevicePolicyManager.clearUserRestriction()
.
गड़बड़ी वाले डायलॉग बंद करें
कुछ मामलों में, जैसे कि खुदरा कारोबार के प्रदर्शन या सार्वजनिक जानकारी
दिखाई देता है, तो हो सकता है कि आप उपयोगकर्ताओं को गड़बड़ी वाले डायलॉग न दिखाना चाहें. Android 9.0 (एपीआई) में
लेवल 28) या उससे बाद का लेवल सेट करने के लिए, सिस्टम में गड़बड़ी वाले डायलॉग
को दिखाया जा सकता है.
यह जोड़कर जवाब नहीं देने वाले ऐप्लिकेशन
DISALLOW_SYSTEM_ERROR_DIALOGS
उपयोगकर्ता
प्रतिबंध. अगर डिवाइस उपयोगकर्ता ने बंद कर दिया है, तो सिस्टम काम नहीं करने वाले ऐप्लिकेशन रीस्टार्ट करता है
ऐप्स को चुना जा सकता है. नीचे दिए गए उदाहरण में बताया गया है कि ऐसा कैसे किया जा सकता है:
Kotlin
override fun onEnabled(context: Context, intent: Intent) { val dpm = getManager(context) val adminName = getWho(context) dpm.addUserRestriction(adminName, UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS) }
Java
public void onEnabled(Context context, Intent intent) { DevicePolicyManager dpm = getManager(context); ComponentName adminName = getWho(context); dpm.addUserRestriction(adminName, UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS); }
अगर मुख्य या सेकंडरी उपयोगकर्ता का एडमिन यह पाबंदी लगाता है, तो सिस्टम सिर्फ़ उस उपयोगकर्ता के लिए, गड़बड़ी वाले डायलॉग को बंद कर देता है. अगर पूरी तरह से मैनेज की गई डिवाइस इस पाबंदी को सेट करता है, तो सिस्टम सभी उपयोगकर्ताओं के लिए डायलॉग को बंद कर देता है.
स्क्रीन चालू रखें
अगर कीऑस्क बनाया जा रहा है, तो किसी डिवाइस को
स्लीप मोड (कम बैटरी मोड) का इस्तेमाल करें. जोड़ें
FLAG_KEEP_SCREEN_ON
लेआउट फ़्लैग को
विंडो देखें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Keep the screen on and bright while this kiosk activity is running. window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Keep the screen on and bright while this kiosk activity is running. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
देख लें कि डिवाइस किसी एसी, यूएसबी या वायरलेस डिवाइस से प्लग-इन किया गया है या नहीं
शामिल करें. बैटरी बदलने वाले ब्रॉडकास्ट के लिए रजिस्टर करें और BatteryManager
का इस्तेमाल करें
चार्जिंग की स्थिति जानने के लिए. इसके अलावा, किसी आईटी टीम को रिमोट तरीके से सूचनाएं भी भेजी जा सकती हैं
डिवाइस के अनप्लग होने पर एडमिन. सिलसिलेवार निर्देशों के लिए, पढ़ें
बैटरी लेवल और चार्जिंग पर नज़र रखें
राज्य.
STAY_ON_WHILE_PLUGGED_IN
को भी सेट किया जा सकता है
ग्लोबल सेटिंग की मदद से डिवाइस को चालू रखें.
Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन में, पूरी तरह से मैनेज किए जा रहे डिवाइसों के एडमिन ये काम कर सकते हैं
DevicePolicyManager.setGlobalSetting()
को दिखाए गए के तौर पर कॉल करें
नीचे दिए गए उदाहरण में:
Kotlin
val pluggedInto = BatteryManager.BATTERY_PLUGGED_AC or BatteryManager.BATTERY_PLUGGED_USB or BatteryManager.BATTERY_PLUGGED_WIRELESS dpm.setGlobalSetting(adminName, Settings.Global.STAY_ON_WHILE_PLUGGED_IN, pluggedInto.toString())
Java
int pluggedInto = BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS; dpm.setGlobalSetting( adminName, Settings.Global.STAY_ON_WHILE_PLUGGED_IN, String.valueOf(pluggedInto));
ऐप्लिकेशन पैकेज
इस सेक्शन में, खास तरह के डिवाइसों पर ऐप्लिकेशन को बेहतर तरीके से इंस्टॉल करने की रेसिपी बताई गई हैं.
ऐप्लिकेशन पैकेज को कैश मेमोरी में सेव करें
अगर किसी शेयर किए गए डिवाइस के सभी उपयोगकर्ता, ऐप्लिकेशन का एक समान सेट शेयर करते हैं, तो इससे ध्यान रखें कि जब भी मुमकिन हो, ऐप्लिकेशन डाउनलोड न करें. उपयोगकर्ता को बेहतर अनुभव देने के लिए उपयोगकर्ताओं के एक निश्चित समूह के साथ शेयर किए गए डिवाइस पर प्रावधान करना, जैसे Shift वर्कर, Android 9.0 (एपीआई लेवल 28) या इसके बाद के वर्शन में, ऐप्लिकेशन को कैश मेमोरी में सेव कर सकते हैं ऐसे पैकेज (APK) जो एक से ज़्यादा उपयोगकर्ता वाले सेशन के लिए ज़रूरी हैं.
कैश मेमोरी में सेव किया गया APK (जो डिवाइस पर पहले से इंस्टॉल है) इंस्टॉल होता है दो स्टेज:
- पूरी तरह से मैनेज किए जा रहे डिवाइस का एडमिन कॉम्पोनेंट (या जिस व्यक्ति को आपने अपने ईमेल खाते का ऐक्सेस दिया है)—देखें निम्न) डिवाइस पर रखने के लिए APK की सूची सेट करती है.
- सहयोगी सेकंडरी उपयोगकर्ताओं (या उनके प्रतिनिधि) के एडमिन कॉम्पोनेंट ये काम कर सकते हैं उपयोगकर्ता की ओर से कैश मेमोरी में सेव किया गया APK इंस्टॉल करने के लिए. पूरी तरह से मैनेज की गई सेवा के एडमिन डिवाइस, प्राइमरी उपयोगकर्ता या सहयोगी (अफ़िलिएट) वर्क प्रोफ़ाइल (या उनकी डेलिगेट) भी कैश मेमोरी में सेव किए गए ऐप्लिकेशन को इंस्टॉल कर सकते हैं.
डिवाइस पर बनाए रखने के लिए APK की सूची सेट करने के लिए, एडमिन
DevicePolicyManager.setKeepUninstalledPackages()
.
यह तरीका इस बात की जांच नहीं करता कि APK डिवाइस पर इंस्टॉल है या नहीं. यह तब काम आता है, जब
उपयोगकर्ता के लिए ज़रूरत पड़ने से पहले ही किसी ऐप्लिकेशन को इंस्टॉल करना हो. लिस्ट पाने के लिए
पहले से सेट किए गए पैकेज, कॉल किए जा सकते हैं
DevicePolicyManager.getKeepUninstalledPackages()
.
बदलाव के साथ setKeepUninstalledPackages()
को कॉल करने के बाद या सेकंडरी कॉल करने पर
उपयोगकर्ता को हटा दिया जाता है, तो सिस्टम कैश किए गए ऐसे APK हटा देता है जिनकी अब ज़रूरत नहीं है.
कैश मेमोरी में सेव किया गया APK इंस्टॉल करने के लिए, कॉल करें
DevicePolicyManager.installExistingPackage()
.
इस तरीके से सिर्फ़ उस ऐप्लिकेशन को इंस्टॉल किया जा सकता है जिसे सिस्टम ने पहले से कैश मेमोरी में सेव किया है—आपके
खास डिवाइस समाधान या डिवाइस इस्तेमाल करने वाले उपयोगकर्ता को पहले इस डिवाइस पर ऐप्लिकेशन इंस्टॉल करना होगा
को कॉल करें.
नीचे दिया गया सैंपल दिखाता है कि आप इसके एडमिन में इन एपीआई कॉल का इस्तेमाल कैसे कर सकते हैं पूरी तरह से मैनेज किया जाने वाला डिवाइस और दूसरा उपयोगकर्ता:
Kotlin
// Set the package to keep. This method assumes that the package is already // installed on the device by managed Google Play. val cachedAppPackageName = "com.example.android.myapp" dpm.setKeepUninstalledPackages(adminName, listOf(cachedAppPackageName)) // ... // The admin of a secondary user installs the app. val success = dpm.installExistingPackage(adminName, cachedAppPackageName)
Java
// Set the package to keep. This method assumes that the package is already // installed on the device by managed Google Play. String cachedAppPackageName = "com.example.android.myapp"; List<String> packages = new ArrayList<String>(); packages.add(cachedAppPackageName); dpm.setKeepUninstalledPackages(adminName, packages); // ... // The admin of a secondary user installs the app. boolean success = dpm.installExistingPackage(adminName, cachedAppPackageName);
ऐप्लिकेशन सौंपना
ऐप्लिकेशन कैश मेमोरी को मैनेज करने के लिए, किसी अन्य ऐप्लिकेशन को ऐक्सेस दिया जा सकता है. ऐसा किया जा सकता है
अपने समाधान की सुविधाओं को अलग कर सकता है या आईटी एडमिन को
निजी ऐप का इस्तेमाल करता है. जिस ऐप्लिकेशन का ऐक्सेस दिया गया है उसे एडमिन के पास वाली अनुमतियां मिलती हैं
कॉम्पोनेंट. उदाहरण के लिए, किसी सेकंडरी उपयोगकर्ता के एडमिन का प्रतिनिधि कॉल कर सकता है
installExistingPackage()
, लेकिन setKeepUninstalledPackages()
को कॉल नहीं कर सकते.
किसी दूसरे व्यक्ति को कॉल करने का तरीका
DevicePolicyManager.setDelegatedScopes()
और शामिल करने के लिए
DELEGATION_KEEP_UNINSTALLED_PACKAGES
का इस्तेमाल करें. नीचे दिए गए उदाहरण में, दूसरा ऐप्लिकेशन बनाने का तरीका बताया गया है
प्रतिनिधि:
Kotlin
var delegatePackageName = "com.example.tools.kept_app_assist" // Check that the package is installed before delegating. try { context.packageManager.getPackageInfo(delegatePackageName, 0) dpm.setDelegatedScopes( adminName, delegatePackageName, listOf(DevicePolicyManager.DELEGATION_KEEP_UNINSTALLED_PACKAGES)) } catch (e: PackageManager.NameNotFoundException) { // The delegate app isn't installed. Send a report to the IT admin ... }
Java
String delegatePackageName = "com.example.tools.kept_app_assist"; // Check that the package is installed before delegating. try { context.getPackageManager().getPackageInfo(delegatePackageName, 0); dpm.setDelegatedScopes( adminName, delegatePackageName, Arrays.asList(DevicePolicyManager.DELEGATION_KEEP_UNINSTALLED_PACKAGES)); } catch (PackageManager.NameNotFoundException e) { // The delegate app isn't installed. Send a report to the IT admin ... }
अगर सब कुछ ठीक रहता है, तो प्रतिनिधि ऐप्लिकेशन को
ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED
और वह प्रतिनिधि बन जाता है. ऐप्लिकेशन इस गाइड में दिए गए तरीकों को कॉल कर सकता है
जैसे कि वह डिवाइस का मालिक या प्रोफ़ाइल का मालिक हो. कॉल करते समय
DevicePolicyManager
तरीके का इस्तेमाल करने पर, एडमिन को null
का ऐक्सेस दिया जाएगा
कॉम्पोनेंट आर्ग्युमेंट.
ऐप्लिकेशन पैकेज इंस्टॉल करें
कभी-कभी, लोकल कैश मेमोरी में सेव किए गए कस्टम ऐप्लिकेशन को
डिवाइस. उदाहरण के लिए, खास तौर पर बनाए गए डिवाइसों को अक्सर
सीमित बैंडविथ या ऐसे इलाके जहां इंटरनेट कनेक्शन न हो. आपका
खास तौर पर आपके लिए उपलब्ध डिवाइस के समाधान के लिए, आपको अपने ग्राहकों के बैंडविथ का ध्यान रखना चाहिए. आपका
ऐप्लिकेशन किसी अन्य ऐप्लिकेशन पैकेज (APK) को इंस्टॉल करने की प्रोसेस शुरू कर सकता है.
PackageInstaller
क्लास.
हालांकि कोई भी ऐप्लिकेशन APK इंस्टॉल कर सकता है, लेकिन पूरी तरह से प्रबंधित डिवाइस पर एडमिन ये काम कर सकते हैं: उपयोगकर्ता के इंटरैक्शन के बिना पैकेज इंस्टॉल या अनइंस्टॉल करने के लिए कहा जाता है. एडमिन, डिवाइस, संगठन का कोई सेकंडरी उपयोगकर्ता या संगठन की कोई वर्क प्रोफ़ाइल. इस तारीख के बाद इंस्टॉलेशन पूरा होने पर, सिस्टम यह सूचना पोस्ट करता है कि डिवाइस के सभी उपयोगकर्ता देखें. इस सूचना से डिवाइस के उपयोगकर्ताओं को पता चलता है कि ऐप्लिकेशन इंस्टॉल किया गया है (या अपडेट किया गया है).
Android वर्शन | इंस्टॉल और अनइंस्टॉल करने के लिए एडमिन कॉम्पोनेंट |
---|---|
Android 9.0 (एपीआई लेवल 28) या इसके बाद का वर्शन | पूरी तरह से मैनेज की गई इकाई में जुड़े हुए सेकंडरी उपयोगकर्ता और वर्क प्रोफ़ाइलें डिवाइस |
Android 6.0 (एपीआई लेवल 23) या इसके बाद का वर्शन | पूरी तरह से मैनेज किए जा रहे डिवाइस |
खास तरह के डिवाइसों पर APK की एक या उससे ज़्यादा कॉपी किस तरह डिस्ट्रिब्यूट की जाएंगी इस बात पर निर्भर करता है कि डिवाइस कितने रिमोट और कितने दूर हैं एक-दूसरे से हैं. आपके समाधान को सुरक्षा के सबसे सही तरीकों का पालन करना होगा खास तरह के डिवाइसों पर APK इंस्टॉल करने से पहले.
सूची में शामिल सेशन को सूची में जोड़ने के लिए, PackageInstaller.Session
का इस्तेमाल किया जा सकता है
या ज़्यादा APK इंस्टॉल करने के लिए. नीचे दिए गए उदाहरण में हमें स्टेटस
हमारी गतिविधि (SingleTop मोड) में सुझाव/राय देने या शिकायत करने के लिए, लेकिन
सेवा या ब्रॉडकास्ट रिसीवर:
Kotlin
// First, create a package installer session. val packageInstaller = context.packageManager.packageInstaller val params = PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL) val sessionId = packageInstaller.createSession(params) val session = packageInstaller.openSession(sessionId) // Add the APK binary to the session. The APK is included in our app binary // and is read from res/raw but file storage is a more typical location. // The I/O streams can't be open when installation begins. session.openWrite("apk", 0, -1).use { output -> getContext().resources.openRawResource(R.raw.app).use { input -> input.copyTo(output, 2048) } } // Create a status receiver to report progress of the installation. // We'll use the current activity. // Here we're requesting status feedback to our Activity but this can be a // service or broadcast receiver. val intent = Intent(context, activity.javaClass) intent.action = "com.android.example.APK_INSTALLATION_ACTION" val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0) val statusReceiver = pendingIntent.intentSender // Start the installation. Because we're an admin of a fully managed device, // there isn't any user interaction. session.commit(statusReceiver)
Java
// First, create a package installer session. PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller(); PackageInstaller.SessionParams params = new PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL); int sessionId = packageInstaller.createSession(params); PackageInstaller.Session session = packageInstaller.openSession(sessionId); // Add the APK binary to the session. The APK is included in our app binary // and is read from res/raw but file storage is a more typical location. try ( // These I/O streams can't be open when installation begins. OutputStream output = session.openWrite("apk", 0, -1); InputStream input = getContext().getResources().openRawResource(R.raw.app); ) { byte[] buffer = new byte[2048]; int n; while ((n = input.read(buffer)) >= 0) { output.write(buffer, 0, n); } } // Create a status receiver to report progress of the installation. // We'll use the current activity. // Here we're requesting status feedback to our Activity but this can be a // service or broadcast receiver. Intent intent = new Intent(context, getActivity().getClass()); intent.setAction("com.android.example.APK_INSTALLATION_ACTION"); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); IntentSender statusReceiver = pendingIntent.getIntentSender(); // Start the installation. Because we're an admin of a fully managed device, // there isn't any user interaction. session.commit(statusReceiver);
सेशन, इंटेंट का इस्तेमाल करके इंस्टॉलेशन के बारे में स्टेटस फ़ीडबैक भेजता है. इस्तेमाल की जानकारी
हर इंटेंट का EXTRA_STATUS
फ़ील्ड
स्थिति. याद रखें कि एडमिन को
STATUS_PENDING_USER_ACTION
स्थिति का अपडेट
क्योंकि डिवाइस उपयोगकर्ता को इंस्टॉलेशन के लिए अनुमति देने की ज़रूरत नहीं है.
ऐप्लिकेशन अनइंस्टॉल करने के लिए, PackageInstaller.uninstall
पर कॉल करें.
पूरी तरह से मैनेज किए जा रहे डिवाइसों के एडमिन, उपयोगकर्ता, और वर्क प्रोफ़ाइल के एडमिन, पैकेज अनइंस्टॉल कर सकते हैं
Android वर्शन के साथ काम करने वाले उपयोगकर्ता इंटरैक्शन के बिना (देखें
टेबल 2).
सिस्टम अपडेट फ़्रीज़ करें
Android डिवाइसों को, सिस्टम और ऐप्लिकेशन के लिए ओवर-द-एयर (ओटीए) अपडेट मिलते हैं सॉफ़्टवेयर डाउनलोड करें. छुट्टियों या छुट्टियों जैसी ज़रूरी अवधियों में, ओएस वर्शन को फ़्रीज़ करने के लिए या ज़्यादा भीड़-भाड़ वाले समय की वजह से, खास आपके लिए बनाए गए डिवाइस, 90 तक के लिए ओटीए सिस्टम अपडेट को निलंबित कर सकते हैं दिन. ज़्यादा जानने के लिए, सिस्टम अपडेट मैनेज करना लेख पढ़ें.
रिमोट कॉन्फ़िगरेशन
Android के मैनेज किए जा रहे कॉन्फ़िगरेशन की मदद से आईटी एडमिन ये काम कर सकते हैं अपने ऐप्लिकेशन को कहीं से भी कॉन्फ़िगर करें. आपको ऐसी सेटिंग दिखानी पड़ सकती हैं जैसे कि आपके ऐप्लिकेशन को आईटी के लिए और काम का बनाने के लिए, अनुमति वाली सूची, नेटवर्क होस्ट या कॉन्टेंट के यूआरएल एडमिन.
अगर आपके ऐप्लिकेशन का कॉन्फ़िगरेशन दिखता है, तो अपनी सेटिंग में सेटिंग को शामिल करना न भूलें दस्तावेज़. अपने ऐप्लिकेशन का कॉन्फ़िगरेशन सार्वजनिक करने और इस पर प्रतिक्रिया देने के बारे में ज़्यादा जानने के लिए सेटिंग में हुए बदलाव, मैनेज किए जा रहे कॉन्फ़िगरेशन सेट अप करें लेख पढ़ें.
डेवलपमेंट सेटअप
खास तरह के डिवाइसों के लिए समाधान तैयार करते समय, कभी-कभी इससे आपके ऐप्लिकेशन को, फ़ैक्ट्री के बिना पूरी तरह से मैनेज किए जा रहे डिवाइस के एडमिन के तौर पर सेट करने में मदद मिलती है रीसेट करें. पूरी तरह से मैनेज किए जा रहे डिवाइस का एडमिन सेट करने के लिए, यह तरीका अपनाएं:
- डिवाइस नीति कंट्रोलर (DPC) वाला ऐप्लिकेशन बनाएं और उसे डिवाइस पर इंस्टॉल करें.
- देखें कि इस डिवाइस पर कोई खाता तो नहीं है.
Android डीबग ब्रिज (adb) शेल में नीचे दिया गया कमांड चलाएं. आपने लोगों तक पहुंचाया मुफ़्त में उदाहरण में,
com.example.dpc/.MyDeviceAdminReceiver
को इससे बदलना ज़रूरी है: आपके ऐप्लिकेशन के एडमिन कॉम्पोनेंट का नाम:adb shell dpm set-device-owner com.example.dpc/.MyDeviceAdminReceiver
आपके समाधान को डिप्लॉय करने में ग्राहकों की मदद करने के लिए, आपको रजिस्ट्रेशन से जुड़े अन्य तरीकों को देखना होगा तरीके. हम इनके लिए क्यूआर-कोड रजिस्टर करने का सुझाव देते हैं: खास तरह के डिवाइस.
अन्य संसाधन
खास तरह के डिवाइसों के बारे में ज़्यादा जानने के लिए, ये दस्तावेज़ पढ़ें: