如何防止应用程序被卸载?

37
我正在开发一款供父母监控孩子的应用程序。因此,这个应用程序不能被孩子删除。我需要知道如何使其无法卸载或者用户需要密码来卸载该应用程序。

2
你认为除非设备被root,否则这种功能不存在有什么好的理由吗? - Jon
3
只是为了补充Jon的评论,以防你没有听懂他的意思,如果这个功能存在的话,那将会是非常糟糕的一件事情。 - Perception
1
@jon,& perception 我知道这很糟糕,但这是客户要求的,我不能与他争论,我已经私下告诉他,如果需要那么多限制,为什么要给孩子们手机。 - Ankur Mistry
一旦我得到解决方案,我会发布代码的,我相信它会对很多人有所帮助。 - Ankur Mistry
@AnkurMistry,你有成功了吗?如果是的话,请与我分享。 - Noman
显示剩余2条评论
2个回答

32

Ankur,

我认为你要找的功能最接近的是2.2版本引入的设备管理功能。

一旦应用程序被注册为设备管理员,除非取消注册,否则无法卸载。这将防止应用程序被卸载。

虽然设备管理器API不允许对此特定功能进行密码保护,但你可以通过密码保护你的应用程序来防止某人篡改应用程序中的设备管理器功能。

我使用一个名为SeekDroid的应用程序,它具有类似的功能。


1
@willtate:“你可以用密码保护应用程序中的注销功能”-- 不,你不能。 - CommonsWare
2
@willtate:设备管理员API提供了一个钩子,让您提供一条解释性消息,告知用户为什么不应注销设备管理员。设备管理员API不提供阻止注销操作的钩子。 - CommonsWare
1
这种方法的问题在于用户仍然可以选择通过从设备管理器中注销来删除应用程序。此时,我认为没有任何解决方案真正防止应用程序被卸载。 - Jaime Botero
原来这在4.4版本中是可行的。在卸载时,Android会提示无法卸载,因为它是设备管理员,但随后会出现一个管理设备管理员的按钮,让您轻松取消其作为设备管理员的选择,从而允许卸载。目前还没有找到防止这种情况发生的方法。 - David
1
就伦理问题而言,这通常是合规软件企业安装的要求(例如),其中用户不拥有手持设备或采用BYOD。对于制造商(例如三星)来说,还有其他特定的方式,他们允许您作为系统应用程序进行签名,如果您是开发合作伙伴。 - Chris.D
显示剩余5条评论

9

我只见过一个应用程序能够做到这一点,它叫做Prey,被用来追踪丢失的手机和计算机。这个项目是开源的,所以您可以查看他们的代码,看看他们是如何实现的,或者联系开发人员,也许他们会告诉你他们是如何实现的。


1
我已经查看了他们的代码,他们确实执行了William Tate答案中所解释的内容! - ingh.am
1
我也见过Prey这样做。如果您允许用户通过密码控制此功能,我认为这一点并不不道德。这样未经授权的人无法卸载敏感应用程序。 - gonzobrains
1
可以通过系统设置->安全-设备管理器选项仍然未注册Prey。 - Chris.D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接