Eine Lösung gefunden. Unten ist meine Methode.
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();
}
}
Alles, was Sie tun müssen, ist die Paketnamen von anderen Anwendungen, die Sie im Kiosk-Modus in der obigen String[]
in mDpm.setLockTaskPackages()
erstellt ausführen möchten setzen. Stellen Sie als Nächstes sicher, dass Sie stopLockTask()
aufrufen, bevor Sie eine Absicht an eine andere Anwendung senden. Andernfalls können Sie nicht von dieser App weg navigieren, da sie bereits gesperrt ist.
Dann alles, was Sie tun müssen, ist startLockTask()
von einer dieser Anwendungen in der String[]
aufrufen. Anstatt nachzufragen, ob Sie diese Apps anheften möchten, werden die Schaltflächen für die Startseite und die zuletzt verwendeten Apps ausgeblendet, und sie werden direkt in den Kioskmodus geschaltet. Denken Sie daran, stopLockTask()
zu rufen, wenn Sie fertig sind!