W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
編寫:zenlynn 原文:http://developer.android.com/training/enterprise/work-policy-ctrl.html
在 Android for Work 的部署中,企業(yè)需要保持對員工設備的某些方面的控制。企業(yè)需要確保工作相關的信息被加密,并與員工的私人數(shù)據(jù)分離。企業(yè)也可能需要限制設備的功能,例如設備是否被允許使用相機。而且企業(yè)也可能需要那些被批準的應用提供應用限制,所以企業(yè)可以根據(jù)需要關閉或打開應用的功能。
為了處理這些任務,企業(yè)開發(fā)并部署設備策略控制器應用(以前稱為工作策略控制器)。該應用被安裝在每一個員工的設備中。安裝在每一個員工設備中的控制應用創(chuàng)建了一個企業(yè)用戶 profile,它可以區(qū)別用戶的私人賬戶以訪問企業(yè)應用和數(shù)據(jù)。該控制應用同時也是企業(yè)管理軟件和設備之間的橋梁;當企業(yè)需要改變配置的時候就告訴控制應用,然后控制應用適當?shù)貫樵O備和其他應用改變設置。
該課程描述了如何在 Android for Work 的部署中為設備開發(fā)一個設備策略控制器。該課程描述了如何創(chuàng)建一個企業(yè)用戶 profile,如何設置設備策略,以及如何在 managed profile 中為其他運行中的應用進行限制。
注意:該課程的內容并不包括在企業(yè)控制之下,設備中唯一的 profile 就是 managed profile 的情況。
在 Android for Work 的部署中,企業(yè)管理員可以設置策略來控制員工設備和應用的行為。企業(yè)管理員用企業(yè)移動管理(EMM)供應商提供的軟件設置這些策略。EMM 軟件與每一個設備上的設備策略控制器進行通訊。設備策略控制器相應地對每一個私人設備上企業(yè)用戶 profile 的設置和行為進行管理。
設備政策管理器內置于設備管理應用現(xiàn)有的模式中,如設備管理中所說。特別是,你的應用需要創(chuàng)建 DeviceAdminReceiver 的子類,如上述文件所說。
用戶經常想在企業(yè)環(huán)境中使用他們的私人設備。這種情況可能讓企業(yè)陷入困境。如果用戶使用他們的私人設備,企業(yè)不得不擔心在這個不受控制的設備上的機密信息(例如員工的電子郵件和通訊錄)。
為了處理這種情況,Android 5.0(API 21)允許企業(yè)使用 managed profile 建立一個特別的企業(yè)用戶 profile,或是在 Android for Work 計劃中建立一個企業(yè) profile。如果設備有企業(yè) managed profile,該 profile 的設置是在企業(yè)管理員的控制之下的。管理員可以選擇在這個 profile 之下,什么應用程序可以運行,什么設備功能可以允許。
要在一個已經有了私人 profile 的設備上創(chuàng)建一個 managed profile,首先得看看該設備是否支持 FEATURE_MANAGED_USERS 系統(tǒng)特性,才能確定該設備是否支持 managed profile:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
// This device does not support native managed profiles!
}
如果該設備支持 managed profile,通過發(fā)送一個帶有 ACTION_PROVISION_MANAGED_PROFILE 行動的 intent 來創(chuàng)建一個 managed profile。另外要包括該設備的管理包名。
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)通過以下行為響應這個 intent:
如以下實例代碼所示,重寫 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);
}
}
當 profile 部署完成,系統(tǒng)調用設備策略控制器應用的 DeviceAdminReceiver.onProfileProvisioningComplete() 方法。重寫該回調方法來完成啟用 managed profile。
通常,你的 DeviceAdminReceiver.onProfileProvisioningComplete() 會執(zhí)行這些任務:
一旦你完成了這些任務,調用設備策略管理器的 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);
設備策略管理器應用負責實行企業(yè)的設備策略。例如,某個企業(yè)可能需要在輸錯一定次數(shù)的設備密碼后鎖定所有設備。該控制器應用需要 EMM 查出當前的策略是什么,然后使用設備管理 API 來實行這些策略。
更多關于如何實行設備策略的信息,請查看設備管理指南。
企業(yè)環(huán)境可能需要那些批準的應用實現(xiàn)安全性或功能限制。應用開發(fā)人員必須實現(xiàn)這些限制,并聲明由企業(yè)管理員使用,如實現(xiàn)應用的限制所說。設備政策管理器接收來自企業(yè)管理員改變的限制,并將這些限制的改變傳送給相關應用。
例如,某個新聞應用有一個控制應用是否允許在蜂窩網絡下下載視頻的限制設定。當 EMM 想要禁用蜂窩下載,它就給控制器應用發(fā)送通知。于是控制器應用轉而通知新聞應用限制設定被改變了。
注意:本文檔涵蓋了設備策略管理器應用如何改變 managed profile 中其他應用的限制設定。關于設備策略管理器應用如何與 EMM 進行通訊的細節(jié)并不在本文檔的范圍之內。
為了改變一個應用的限制,調用 DevicePolicyManager.setApplicationRestrictions() 方法。該方法需要傳入三個參數(shù):該控制器應用的 DeviceAdminReceiver,限制被改變的應用的包名,以及包含了你想要設置的限制的 Bundle。
例如,假設 managed profile 中有一個應用包名是 "com.example.newsfetcher"
。該應用有一個布爾型限制可以被配置,key 是 "downloadByCellular"
。如果這個限制被設置為 false
,該應用在蜂窩網絡下就不能下載數(shù)據(jù),它必須使用 Wi-Fi 網絡代替。
如果你的設備策略管理器應用需要關掉蜂窩下載,它首先要取得設備策略服務對象,如上文所說。然后集合一個限制 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);
注意:該設備策略服務將限制改變傳遞給了你所指定的應用。然而,實際是由應用來執(zhí)行該限制。例如,在這個情況中,該應用要負責禁用它本身的使用蜂窩網絡下載視頻的功能。設置限制并不能讓系統(tǒng)強制在應用上實現(xiàn)限制。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: