请教 android 大佬,怎么让 app 适配 DevicePolicyManager

120 天前
 magic3584

目前有个 flutter app 运行在 android 设备上,但是需要不能手势退出 app (只能主动点按钮退出)

搜索到 flutter 插件( https://pub.dev/packages/kiosk_mode) 但是只是进入了 pin screen 模式

看 README 里有一句话:

If DevicePolicyManager#isLockTaskPermitted(String) returns true for this component, the current task will be launched directly into LockTask mode.

由于我不会 android 开发,特来请教大佬怎么实现

3042 次点击
所在节点    Android
8 条回复
learnshare
120 天前
为啥要干扰系统级的操作
不想退出,就弹出窗口再确认一下
magic3584
120 天前
@learnshare #1
就是类似一个控制的 app ,不能主动退出
XXWHCA
120 天前
XXWHCA
120 天前
@learnshare 这些是面向企业场景的 api ,例如演示大屏,或者电梯广告这种场景,不允许用户退出 app
magic3584
119 天前
@XXWHCA #3
大佬,经过我一阵捣鼓,功能是实现了,但是有个问题,我 app 无法卸载了。。。
起因是我用 chatGPT 帮我写了个类 https://github.com/magic3584/API/blob/master/DeviceOwnerUtil.kt (里面 clear 是我写的但是没生效。。。)
然后如下调用
``` kotlin
class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
DeviceOwnerUtil.setDeviceOwner(this);
// DeviceOwnerUtil.clearDeviceOwner(this)
}
}
```
然后发现先是无法停止
adb shell dpm remove-active-admin com.xxx/.AdminReceiver

Exception occurred while executing 'remove-active-admin':
java.lang.SecurityException: Attempt to remove non-test admin ComponentInfo{com.xxx/com.xxx.AdminReceiver} 0

后来发现又无法卸载
➜ Desktop adb shell pm uninstall com.xxx
Failure [DELETE_FAILED_INTERNAL_ERROR]

pad 上 app 的“卸载”和“强行停止”都是灰的。。。

真是喜闻乐见。。。
XXWHCA
119 天前
@magic3584 到设备管理器里找到你的 app ,禁用它,然后再卸载
XXWHCA
119 天前
@magic3584 不太确定是不是设备管理器里启用导致无法卸载掉,我记得设备管理器是需要手动到设置里开启的,通过调用 API 应该是无法修改的
magic3584
118 天前
@XXWHCA #6
感谢大佬,
设置里无法停用,最后只能恢复出厂设置了。。。
不知道怎么就搞成这样了😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1010630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX