Android 检测应用程序是否已卸载

Android 检测应用程序是否已卸载,android,Android,是否有方法在卸载应用程序时获取系统通知 我想维护一个当前使用我的应用程序的所有客户信息表。然而,如果没有办法检测到这一事件,这似乎是不可能的 我能想到的第一个解决方案是让一个始终运行的服务在后台监听android.intent.action.PACKAGE\u。但是,卸载过程结束后,该服务会被终止,还是会在卸载过程开始前停止?此外,即使这是一个解决方案,当很多人意识到应用程序的一部分在后台运行时,它也有可能让他们感到不快 有什么建议吗?谢谢 你只需换一种方式,维护一个活跃使用你的应用程序的用户表

是否有方法在卸载应用程序时获取系统通知

我想维护一个当前使用我的应用程序的所有客户信息表。然而,如果没有办法检测到这一事件,这似乎是不可能的

我能想到的第一个解决方案是让一个始终运行的服务在后台监听
android.intent.action.PACKAGE\u
。但是,卸载过程结束后,该服务会被终止,还是会在卸载过程开始前停止?此外,即使这是一个解决方案,当很多人意识到应用程序的一部分在后台运行时,它也有可能让他们感到不快


有什么建议吗?谢谢

你只需换一种方式,维护一个活跃使用你的应用程序的用户表。只需在程序中的某个点调用Web服务,即可显示它处于活动状态。如果某个应用程序在特定时间内未使用,请将其标记为不活动

报告说:

正在卸载的程序包没有收到此目的

因此,您可以监视正在卸载的其他应用程序,但不能监视您自己的应用程序


因此,您可能需要跟踪谁仍在使用您的应用程序,而不是谁已停止使用它。如果你不想让自己的服务器来做这件事,你可以使用一个免费的服务,比如安卓文档中的。

,用户卸载的应用程序无法获得

Intent.ACTION_PACKAGE_REMOVE
但我们可以使用其他方法来实现此功能。我们都知道,在用户安装应用程序之后,/data/data目录下有一个名为的目录,其中包含您的包名。如果用户卸载了你的应用程序,系统将删除你的应用程序的根目录(/data/data/com.example.yourappname)。当用户单击“卸载”时,删除操作立即发生,并且该目录将被framework package manager系统删除

因此,我们可以监视应用程序数据目录(通常为/data/data/com.example.yourappname)的存在,以检测用户是否卸载了应用程序

为了监视这个目录,我们必须从JNI派生一个分离的进程。 在这个新的fork过程中,我们可以使用Linux系统api inotify(7)或access(3)来确定应用程序的数据目录是否存在

这是一个可行的实现。但当它试图发送在高版本安卓设备上启动系统浏览器的意向时,遇到了权限问题。我不知道如何绕过这个。然而,上面的例子足以回答您的问题


希望这会有帮助

Android没有内置跟踪应用卸载的功能

通知可以作为跟踪应用程序卸载的替代方法。为此,请在应用程序上发送通知并跟踪通知的状态。计算特定时间段内未送达通知的数量。如果在特定时间内未传递通知的状态没有改变,那么考虑应用程序已从设备卸载。


例如,我使用了一个cron脚本,它每3天运行一次,并检查最近10个发送到设备的通知的状态(一天发送2个通知)。如果这10个通知的状态均为“未送达”,则该应用程序将被视为已从设备上卸载。

最近使用过我的应用程序的用户不是一个准确的测量值,这无法满足我的需要。我正在使用GAE,所以我不担心服务器端。如何使用flurry监控应用程序卸载?这正是我所需要的,但无法真正了解如何做到这一点。你能找到解决问题的方法吗?应用程序可能无法接收通知的原因有很多