有没有办法在卸载应用程序时获得系统通知?
我想维护目前使用我的应用程序的所有客户信息的表格。但是,如果无法检测到此事件,那似乎是不可能的。
我能想到的第一个解决方案是在后台监听android.intent.action.PACKAGE_REMOVED
时始终运行服务。但是,一旦卸载过程结束,该服务会被杀死,还是会在该过程开始之前停止?即使这是一个解决方案,当他们意识到应用程序的一部分在后台运行时,它有可能让许多人失望。
有什么建议吗?谢谢!
答案 0 :(得分:6)
您可以简单地执行此操作,并维护一个主动使用您应用的用户表。只需在程序中的某个位置调用Web服务即可显示它处于活动状态。如果某个应用未使用某段时间,请将其标记为无效。
答案 1 :(得分:5)
documentation for the PACKAGE_REMOVED action说明如下:
正在卸载的软件包不收到此Intent。
因此,您可以监控其他正在卸载的应用程序,但不能监控自己的应用程序。
因此,您可能需要跟踪谁仍在使用您的应用程序,而不是谁已停止使用它。如果您不希望拥有自己的服务器的开销,那么您可以使用Flurry之类的免费服务。
答案 2 :(得分:1)
从Android文档中,用户卸载的应用程序无法获取
Intent.ACTION_PACKAGE_REMOVE
但我们可以使用其他方法来实现此功能。我们都知道在用户安装应用程序后,/ data / data目录下有一个以包名命名的目录。如果用户卸载了您的应用,系统将删除您应用的根目录(/data/data/com.example.yourappname)。当用户单击“卸载”时,立即发生删除操作,框架包管理器系统将删除该目录。
因此,我们可以监控您的应用数据目录(通常是/data/data/com.example.yourappname)是否存在,以检测用户是否卸载了您的应用。
为了监视这个目录,我们必须从JNI派生一个分离的进程。 在这个新的fork过程中,我们可以使用Linux系统api inotify(7)或access(3)来确定app数据目录的存在。
Here是一个可行的实现。但是当尝试在高版本Android设备上发送启动系统浏览器的意图时,它获得了权限问题。我不知道如何绕过这个。但是上面的例子对你的问题已经足够了。
希望它会有所帮助!
答案 3 :(得分:-1)
Android不提供用于跟踪应用卸载的内置功能。
通知可用作跟踪应用卸载的备用方式。对于此应用程序的发送通知并跟踪通知的状态。计算特定时间段内未交付通知的数量。如果未传递通知的状态在该特定时间段内未发生变化,请考虑已从设备中卸载该应用。
例如,我使用了一个每3天运行一次的cron脚本,并检查传送到设备的最后10个通知的状态(一天发送2个通知)。如果所有这10个通知的状态都“未送达”,则认为该应用程序已从设备中卸载。