W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:zenlynn 原文:http://developer.android.com/training/enterprise/work-policy-ctrl.html
在 Android for Work 的部署中,企業(yè)需要保持對(duì)員工設(shè)備的某些方面的控制。企業(yè)需要確保工作相關(guān)的信息被加密,并與員工的私人數(shù)據(jù)分離。企業(yè)也可能需要限制設(shè)備的功能,例如設(shè)備是否被允許使用相機(jī)。而且企業(yè)也可能需要那些被批準(zhǔn)的應(yīng)用提供應(yīng)用限制,所以企業(yè)可以根據(jù)需要關(guān)閉或打開應(yīng)用的功能。
為了處理這些任務(wù),企業(yè)開發(fā)并部署設(shè)備策略控制器應(yīng)用(以前稱為工作策略控制器)。該應(yīng)用被安裝在每一個(gè)員工的設(shè)備中。安裝在每一個(gè)員工設(shè)備中的控制應(yīng)用創(chuàng)建了一個(gè)企業(yè)用戶 profile,它可以區(qū)別用戶的私人賬戶以訪問企業(yè)應(yīng)用和數(shù)據(jù)。該控制應(yīng)用同時(shí)也是企業(yè)管理軟件和設(shè)備之間的橋梁;當(dāng)企業(yè)需要改變配置的時(shí)候就告訴控制應(yīng)用,然后控制應(yīng)用適當(dāng)?shù)貫樵O(shè)備和其他應(yīng)用改變?cè)O(shè)置。
該課程描述了如何在 Android for Work 的部署中為設(shè)備開發(fā)一個(gè)設(shè)備策略控制器。該課程描述了如何創(chuàng)建一個(gè)企業(yè)用戶 profile,如何設(shè)置設(shè)備策略,以及如何在 managed profile 中為其他運(yùn)行中的應(yīng)用進(jìn)行限制。
注意:該課程的內(nèi)容并不包括在企業(yè)控制之下,設(shè)備中唯一的 profile 就是 managed profile 的情況。
在 Android for Work 的部署中,企業(yè)管理員可以設(shè)置策略來控制員工設(shè)備和應(yīng)用的行為。企業(yè)管理員用企業(yè)移動(dòng)管理(EMM)供應(yīng)商提供的軟件設(shè)置這些策略。EMM 軟件與每一個(gè)設(shè)備上的設(shè)備策略控制器進(jìn)行通訊。設(shè)備策略控制器相應(yīng)地對(duì)每一個(gè)私人設(shè)備上企業(yè)用戶 profile 的設(shè)置和行為進(jìn)行管理。
設(shè)備政策管理器內(nèi)置于設(shè)備管理應(yīng)用現(xiàn)有的模式中,如設(shè)備管理中所說。特別是,你的應(yīng)用需要?jiǎng)?chuàng)建 DeviceAdminReceiver 的子類,如上述文件所說。
用戶經(jīng)常想在企業(yè)環(huán)境中使用他們的私人設(shè)備。這種情況可能讓企業(yè)陷入困境。如果用戶使用他們的私人設(shè)備,企業(yè)不得不擔(dān)心在這個(gè)不受控制的設(shè)備上的機(jī)密信息(例如員工的電子郵件和通訊錄)。
為了處理這種情況,Android 5.0(API 21)允許企業(yè)使用 managed profile 建立一個(gè)特別的企業(yè)用戶 profile,或是在 Android for Work 計(jì)劃中建立一個(gè)企業(yè) profile。如果設(shè)備有企業(yè) managed profile,該 profile 的設(shè)置是在企業(yè)管理員的控制之下的。管理員可以選擇在這個(gè) profile 之下,什么應(yīng)用程序可以運(yùn)行,什么設(shè)備功能可以允許。
要在一個(gè)已經(jīng)有了私人 profile 的設(shè)備上創(chuàng)建一個(gè) managed profile,首先得看看該設(shè)備是否支持 FEATURE_MANAGED_USERS 系統(tǒng)特性,才能確定該設(shè)備是否支持 managed profile:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
// This device does not support native managed profiles!
}
如果該設(shè)備支持 managed profile,通過發(fā)送一個(gè)帶有 ACTION_PROVISION_MANAGED_PROFILE 行動(dòng)的 intent 來創(chuàng)建一個(gè) managed profile。另外要包括該設(shè)備的管理包名。
Activity provisioningActivity = getActivity();
// You'll need the package name for the WPC app.
String myWPCPackageName = "com.example.myWPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
intent.putExtra(myWPCPackageName,
provisioningActivity.getApplicationContext().getPackageName());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
== null) {
// No handler for intent! Can't provision this device.
// Show an error message and cancel.
} else {
// REQUEST_PROVISION_MANAGED_PROFILE is defined
// to be a suitable request code
startActivityForResult(provisioningIntent,
REQUEST_PROVISION_MANAGED_PROFILE);
provisioningActivity.finish();
}
系統(tǒng)通過以下行為響應(yīng)這個(gè) intent:
如以下實(shí)例代碼所示,重寫 onActivityResult() 來查看部署是否完成。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check if this is the result of the provisioning activity
if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
// If provisioning was successful, the result code is
// Activity.RESULT_OK
if (resultCode == Activity.RESULT_OK) {
// Hurray! Managed profile created and provisioned!
} else {
// Boo! Provisioning failed!
}
return;
} else {
// This is the result of some other activity, call the superclass
super.onActivityResult(requestCode, resultCode, data);
}
}
當(dāng) profile 部署完成,系統(tǒng)調(diào)用設(shè)備策略控制器應(yīng)用的 DeviceAdminReceiver.onProfileProvisioningComplete() 方法。重寫該回調(diào)方法來完成啟用 managed profile。
通常,你的 DeviceAdminReceiver.onProfileProvisioningComplete() 會(huì)執(zhí)行這些任務(wù):
一旦你完成了這些任務(wù),調(diào)用設(shè)備策略管理器的 setProfileEnabled() 方法來激活 managed profile:
// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
(DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created managed profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Managed Profile");
// ...and enable the profile
manager.setProfileEnabled(componentName);
設(shè)備策略管理器應(yīng)用負(fù)責(zé)實(shí)行企業(yè)的設(shè)備策略。例如,某個(gè)企業(yè)可能需要在輸錯(cuò)一定次數(shù)的設(shè)備密碼后鎖定所有設(shè)備。該控制器應(yīng)用需要 EMM 查出當(dāng)前的策略是什么,然后使用設(shè)備管理 API 來實(shí)行這些策略。
更多關(guān)于如何實(shí)行設(shè)備策略的信息,請(qǐng)查看設(shè)備管理指南。
企業(yè)環(huán)境可能需要那些批準(zhǔn)的應(yīng)用實(shí)現(xiàn)安全性或功能限制。應(yīng)用開發(fā)人員必須實(shí)現(xiàn)這些限制,并聲明由企業(yè)管理員使用,如實(shí)現(xiàn)應(yīng)用的限制所說。設(shè)備政策管理器接收來自企業(yè)管理員改變的限制,并將這些限制的改變傳送給相關(guān)應(yīng)用。
例如,某個(gè)新聞應(yīng)用有一個(gè)控制應(yīng)用是否允許在蜂窩網(wǎng)絡(luò)下下載視頻的限制設(shè)定。當(dāng) EMM 想要禁用蜂窩下載,它就給控制器應(yīng)用發(fā)送通知。于是控制器應(yīng)用轉(zhuǎn)而通知新聞應(yīng)用限制設(shè)定被改變了。
注意:本文檔涵蓋了設(shè)備策略管理器應(yīng)用如何改變 managed profile 中其他應(yīng)用的限制設(shè)定。關(guān)于設(shè)備策略管理器應(yīng)用如何與 EMM 進(jìn)行通訊的細(xì)節(jié)并不在本文檔的范圍之內(nèi)。
為了改變一個(gè)應(yīng)用的限制,調(diào)用 DevicePolicyManager.setApplicationRestrictions() 方法。該方法需要傳入三個(gè)參數(shù):該控制器應(yīng)用的 DeviceAdminReceiver,限制被改變的應(yīng)用的包名,以及包含了你想要設(shè)置的限制的 Bundle。
例如,假設(shè) managed profile 中有一個(gè)應(yīng)用包名是 "com.example.newsfetcher"
。該應(yīng)用有一個(gè)布爾型限制可以被配置,key 是 "downloadByCellular"
。如果這個(gè)限制被設(shè)置為 false
,該應(yīng)用在蜂窩網(wǎng)絡(luò)下就不能下載數(shù)據(jù),它必須使用 Wi-Fi 網(wǎng)絡(luò)代替。
如果你的設(shè)備策略管理器應(yīng)用需要關(guān)掉蜂窩下載,它首先要取得設(shè)備策略服務(wù)對(duì)象,如上文所說。然后集合一個(gè)限制 bundle 并將該 bundle 傳入 setApplicationRestrictions():
// Fetch the DevicePolicyManager
DevicePolicyManager myDevicePolicyMgr =
(DevicePolicyManager) thisActivity
.getSystemService(Context.DEVICE_POLICY_SERVICE);
// Set up the restrictions bundle
bundle restrictionsBundle = new Bundle();
restrictionsBundle.putBoolean("downloadByCellular", false);
// Pass the restrictions to the policy manager. Assume the WPC app
// already has a DeviceAdminReceiver defined (myDeviceAdminReceiver).
myDevicePolicyMgr.setApplicationRestrictions(
myDeviceAdminReceiver, "com.example.newsfetcher", restrictionsBundle);
注意:該設(shè)備策略服務(wù)將限制改變傳遞給了你所指定的應(yīng)用。然而,實(shí)際是由應(yīng)用來執(zhí)行該限制。例如,在這個(gè)情況中,該應(yīng)用要負(fù)責(zé)禁用它本身的使用蜂窩網(wǎng)絡(luò)下載視頻的功能。設(shè)置限制并不能讓系統(tǒng)強(qiáng)制在應(yīng)用上實(shí)現(xiàn)限制。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: