Android 使用 Android 管理 API 策略时,Kiosk 模式不工作
Android Kiosk mode not working when using Android Management API Policy
所以我正在尝试让一次性使用的专用应用程序 + 设备在信息亭模式下工作 + 自动启动。该应用程序本身是用 Nativescript 构建的(使用 Angular),因此不是原生的 Java,但是这仍然通过管理接收器等正常处理。
当我们使用 adb
设置设备所有者时,kiosk 模式按预期工作。
adb shell dpm set-device-owner com.domain.app/.DeviceAdminReceiver
当我们使用 Android 管理策略注册设备和自动安装时,信息亭模式永远不会正确启动。
{
"name": "enterprises/LC00mpaqaj/policies/policy1",
"version": "12",
"applications": [
{
"packageName": "com.domain.app",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT"
}
],
"persistentPreferredActivities": [
{
"receiverActivity": "com.domain.app/.DeviceAdminReceiver",
"actions": [
"android.intent.action.MAIN"
],
"categories": [
"android.intent.category.HOME",
"android.intent.category.DEFAULT"
]
}
],
"dataRoamingDisabled": true,
"kioskCustomLauncherEnabled": true
}
AndroidManifest.xml - 与管理接收者相关的部分
<receiver
android:name=".DeviceAdminReceiver"
android:lockTaskMode="if_whitelisted"
android:description="@string/admin_description"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin_permissions" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
当我通过 AMAPI 在单个设备上执行 GET 时,它显示..
{
"name": "enterprises/LC00mpaqaj/devices/3e26eac6be79d049",
"managementMode": "DEVICE_OWNER",
"state": "ACTIVE",
"appliedState": "ACTIVE",
"policyCompliant": true,
"nonComplianceDetails": [
{
"settingName": "persistentPreferredActivities",
"nonComplianceReason": "INVALID_VALUE",
"packageName": "com.domain.app"
}
],...
所以它似乎不喜欢 persistentPreferredActivities
,但是我一直在尝试尝试在这个 medium kiosk article, as well as the actual google kiosk policy examples.
上找到的例子
基于这些示例,我尝试使用各种 receiverActivity
替代格式,但仍然不满意:
"receiverActivity": "com.domain.app/.DeviceAdminReceiver",
"receiverActivity": "com.domain.app",
"receiverActivity": "com.domain.app/.com.domain.app.DeviceAdminReceiver",
所以我的问题是:为什么我不能让 android 信息亭模式与我的政策一起工作,但它与 ADB 一起工作?
半相关, 在测试我可能的解决方案,所以我不得不将更改推送到 prod track,这使得我的开发周期相当长/艰巨。
我不是 Android 管理 API 专家,但您尝试过不使用 kioskCustomLauncherEnabled
参数吗?在我 运行 的测试中,它会启动 Google 自己的 Kiosk 应用程序,可能会阻止您的 activity 启动。
我的两分钱:)
我想补充一点,如果您设置 "installType": "KIOSK"
,您不再需要 persistentPreferredActivities
或 lockType
。
这似乎是今年推出的一项新功能,我刚刚发现它(更新日志中没有任何内容)。它应该会稍微简化您的配置。
所以我正在尝试让一次性使用的专用应用程序 + 设备在信息亭模式下工作 + 自动启动。该应用程序本身是用 Nativescript 构建的(使用 Angular),因此不是原生的 Java,但是这仍然通过管理接收器等正常处理。
当我们使用 adb
设置设备所有者时,kiosk 模式按预期工作。
adb shell dpm set-device-owner com.domain.app/.DeviceAdminReceiver
当我们使用 Android 管理策略注册设备和自动安装时,信息亭模式永远不会正确启动。
{
"name": "enterprises/LC00mpaqaj/policies/policy1",
"version": "12",
"applications": [
{
"packageName": "com.domain.app",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT"
}
],
"persistentPreferredActivities": [
{
"receiverActivity": "com.domain.app/.DeviceAdminReceiver",
"actions": [
"android.intent.action.MAIN"
],
"categories": [
"android.intent.category.HOME",
"android.intent.category.DEFAULT"
]
}
],
"dataRoamingDisabled": true,
"kioskCustomLauncherEnabled": true
}
AndroidManifest.xml - 与管理接收者相关的部分
<receiver
android:name=".DeviceAdminReceiver"
android:lockTaskMode="if_whitelisted"
android:description="@string/admin_description"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin_permissions" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
当我通过 AMAPI 在单个设备上执行 GET 时,它显示..
{
"name": "enterprises/LC00mpaqaj/devices/3e26eac6be79d049",
"managementMode": "DEVICE_OWNER",
"state": "ACTIVE",
"appliedState": "ACTIVE",
"policyCompliant": true,
"nonComplianceDetails": [
{
"settingName": "persistentPreferredActivities",
"nonComplianceReason": "INVALID_VALUE",
"packageName": "com.domain.app"
}
],...
所以它似乎不喜欢 persistentPreferredActivities
,但是我一直在尝试尝试在这个 medium kiosk article, as well as the actual google kiosk policy examples.
基于这些示例,我尝试使用各种 receiverActivity
替代格式,但仍然不满意:
"receiverActivity": "com.domain.app/.DeviceAdminReceiver",
"receiverActivity": "com.domain.app",
"receiverActivity": "com.domain.app/.com.domain.app.DeviceAdminReceiver",
所以我的问题是:为什么我不能让 android 信息亭模式与我的政策一起工作,但它与 ADB 一起工作?
半相关,
我不是 Android 管理 API 专家,但您尝试过不使用 kioskCustomLauncherEnabled
参数吗?在我 运行 的测试中,它会启动 Google 自己的 Kiosk 应用程序,可能会阻止您的 activity 启动。
我的两分钱:)
我想补充一点,如果您设置 "installType": "KIOSK"
,您不再需要 persistentPreferredActivities
或 lockType
。
这似乎是今年推出的一项新功能,我刚刚发现它(更新日志中没有任何内容)。它应该会稍微简化您的配置。