1

我有一个关于开发企业跟踪应用程序的请求。应用程序应该能够获取手机的当前位置并每 5 分钟将其发送到服务器。即使应用程序在后台运行 - 用户也可以轻松将其关闭。我需要为此创建某种限制,也许是基于密码的。为了关闭此应用程序,用户必须输入密码。如果他正在重新启动,应用程序应该在重新启动后自动运行。

是否有可能做到这一点?

4

4 回答 4

3

不它不是!

但是......我知道一个可以完成工作的技巧,它的名字是AlarmManager

您可以为您的应用程序设置警报,每 1 秒发出一次警报,如果应用程序被关闭,它将自行重建。此时可以设置密码关闭alarmManager。

但只是为了让你知道,我尝试过一次,谷歌什么也没告诉我,但用户给我留言说应用程序正在入侵他们的设备;)

于 2012-08-20T14:29:44.040 回答
2

从 ICS 开始,任何实现设备管理的应用程序都无法停止。但唯一的缺点是用户可以删除 Devvice Administrator。
您可以限制您的应用程序仅在管理员开启时工作。另一种方法是,如果用户删除了管理员,您可以使用resetpassword
使用自定义密码锁定整个设备。

于 2012-08-20T18:11:12.813 回答
1

如果设备已植根,您可以实现它,但由于需要修改系统文件,您可能无法将应用程序作为 APK 分发。也许作为通过 Clockwork mod 闪现的 Zip。但请注意使设备的保修失效。

Babibu 关于警报的建议是一种新颖的方法,但要小心不要经常唤醒系统,因为这会更快地耗尽电池电量。

实际上,您将面临的一个大问题是用户可以禁用 GPS,然后您无法以编程方式再次将其重新打开 - 除非您尝试使用显然不理想且不适用于所有设备的漏洞利用。

一个更好的主意可能只是在用户禁用应用程序或 GPS 时向您的服务器报告。您将知道哪个用户禁用了它,以便您的组织可以适当地惩罚该用户。

于 2012-08-20T14:55:43.377 回答
1

您正在寻找的是设备管理

http://developer.android.com/guide/topics/admin/device-admin.html

此页面解释了它的工作原理以及如何更改有关密码和禁用相机的各种策略。等等

他们几乎没有谈论的是,一旦以设备管理员身份启用应用程序,您就无法在不先禁用此功能的情况下将其杀死或卸载。以正确的方式实现启用/禁用按钮取决于您。

为确保即使被系统杀死(在资源不足的情况下)服务也始终重新启动,您需要覆盖 Service 的此方法:

public int onStartCommand (Intent intent, int flags, int startId)
    {
        return START_STICKY;
    }

最后,要让您的服务在启动时启动,您需要捕获 ACTION_BOOT_COMPLETED 广播。

主要问题是您无法阻止用户禁用 GPS 或使用模拟位置,但您可以检测并记录它。通知用户他们被监视是一种很好的做法(实际上在我的国家是强制性的),这样您就可以在解释他们的同时知道他们是否弄乱了 GPS。

植根电话是另一种解决方案,但您可能会打开比关闭更多的门;)

于 2015-07-31T15:39:19.953 回答