我有关于开发enterprice跟踪应用程序的请求。应用程序应该能够获取电话的当前位置并每隔5分钟将其发送到服务器。即使应用程序在后台运行 - 用户也可以轻松关闭它。我需要为此创建某种限制,可能是基于密码的。要关闭此应用程序,用户必须输入密码。如果他正在重新启动,应用程序应该在重新启动后自动运行。
是否可以这样做?
答案 0 :(得分:3)
不,不是!
但是......我知道一个可以完成工作的技巧,它的名字是AlarmManager
您可以为应用程序设置警报,每隔1秒发出一次警报,如果应用程序已关闭,它将自行重建。 此时,您可以设置密码以关闭alarmManager。
但是只是为了让你知道,我曾经尝试过这一次,谷歌没有告诉我什么,但是用户给我发了一条评论,说该应用程序正在攻击他们的设备;)
答案 1 :(得分:2)
从ICS开始,任何实施Device Administration的应用都无法停止。但唯一的缺点是用户可以删除Devvice Administrator 您可以限制您的应用仅在管理员开启时才能使用 还有一种方法是,如果用户删除管理员,您可以使用resetpassword使用自定义密码锁定整个设备。
答案 2 :(得分:1)
如果设备已植根,您可以实现该功能,但由于需要修改系统文件,您可能无法将应用程序分发为APK。也许作为通过发条模块闪现的Zip。请注意尽快取消设备的保修。
Babibu关于警报的建议是一种新颖的方法,但要小心不断地唤醒系统,因为这会更快地耗尽电池。
实际上你将遇到的一个大问题是,用户可以禁用GPS,然后你不能以编程方式重新打开它 - 除非你试图使用一个显然不理想的漏洞,并且不能全部使用设备
更好的想法可能只是在用户禁用应用程序或GPS时向您的服务器报告。您将知道哪个用户禁用了它,以便您的组织可以适当地惩罚该用户。
答案 3 :(得分:1)
您正在寻找的是设备管理
http://developer.android.com/guide/topics/admin/device-admin.html
此页面说明了它的工作原理以及如何更改有关密码和禁用相机的所有政策。等等
他们几乎没有谈到的是,只要设备管理员启用了应用程序,您就可以杀死它或卸载它而不首先禁用此功能。您可以通过正确的方式实现启用/禁用按钮。
为了确保服务总是重新启动,即使被系统杀死(在低资源情况下),您需要覆盖服务的这种方法:
public int onStartCommand (Intent intent, int flags, int startId)
{
return START_STICKY;
}
最后要让你的服务在启动时启动,你需要捕获ACTION_BOOT_COMPLETED广播。
主要问题是您无法阻止用户禁用GPS或使用模拟位置,但您可以检测并记录它。 这是一个很好的做法(实际上在我的国家是必须的),注意到他们被观看的用户,这样你就可以在你知道他们是否搞砸了GPS的同时解释它们。
根植手机是另一种解决方案,但你可能会打开比你关闭更多的门;)