找到了解決方案。以下是我的方法。
private void enableKioskMode() {
ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
DevicePolicyManager mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
// First of all, to access anything you must be device owner
if (mDpm.isDeviceOwnerApp(getPackageName())) {
// If not device admin, ask to become one
if (!mDpm.isAdminActive(deviceAdmin) &&
mDpm.isDeviceOwnerApp(getPackageName())) {
Log.v(TAG, "Not device admin. Asking device owner to become one.");
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"You need to be a device admin to enable kiosk mode.");
startActivity(intent);
}
// Device owner and admin : enter kiosk mode
else {
mDpm.setLockTaskPackages(deviceAdmin, new String[]{
getPackageName(), /** PUT OTHER PACKAGE NAMES HERE! */
});
startLockTask();
}
}
// Not device owner - can't access anything
else {
Log.v(TAG, "Not device owner");
Toast.makeText(this, "Not device owner", Toast.LENGTH_SHORT).show();
}
}
所有你需要做的就是把你想在Kiosk模式在mDpm.setLockTaskPackages()
創建的上述String[]
運行任何其他應用程序的包名。接下來,請確保您在向另一個應用程序發送意向之前致電stopLockTask()
。否則,您將無法離開此應用程序,因爲它已被鎖定。
然後,您只需撥打String[]
中的任何應用程序即可撥打startLockTask()
。與其詢問是否要固定這些應用程序,主頁和最近的應用程序按鈕將消失,並且會直接鎖定到自助服務終端模式。請記得在完成後致電stopLockTask()
!