The simplest approach is probably to use Google's Android Management API, it's compatible with all Android devices running Android 5.1 or above.
To lock the device on one app, or on multiple app, you define a kiosk policy like below:
"applications": [
{
"packageName": "com.example.app",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
},
{
"packageName": "com.example.app2",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
}
"persistentPreferredActivities": [
{
"receiverActivity": "com.example.app/.com.example.app.MainActivity",
"actions": [
"android.intent.action.MAIN"
],
"categories": [
"android.intent.category.HOME",
"android.intent.category.DEFAULT"
]
}
]
If there is no link from one app to the other you can implement a very simple custom launcher to allow switching apps, and configure the policy as below:
"applications": [
{
"packageName": "com.custom.launcher",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
},
{
"packageName": "com.example.app",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
},
{
"packageName": "com.example.app2",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
}
"persistentPreferredActivities": [
{
"receiverActivity": "com.custom.launcher/.com.example.app.MainActivity",
"actions": [
"android.intent.action.MAIN"
],
"categories": [
"android.intent.category.HOME",
"android.intent.category.DEFAULT"
]
}
]