我们所知道的通常(在实践中任何)防病毒应用程序在卸载之前用于触发简单的对话框,例如:"你要卸载应用程序,你确定吗?" - "是/否".
是的,我知道我可以使用intent-filter拦截包删除意图,例如:
<activity
android:name=".UninstallIntentActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DELETE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
但问题很简单,这会拦截任何删除请求,而且这会触发我的应用程序和库存安装程序之间的选择器对话框.因此,如果用户将选择库存安装程序 - 我将无法做任何事情.
我的目标不是阻止用户卸载我的应用程序,而只是回滚我的应用程序所做的更改.
从这些防病毒应用程序中学习我发现这种操作是可行的,所以请帮助我并解释它是如何可能的?
更新
由于有些人不相信它是真的 - 我会参考Avast移动安全:
Anti-Theft通过各种自我保护技术伪装其组件来保护自己免于卸载.
另一个例子:适用于Android的卡巴斯基互联网安全 - 这是卸载它的特殊程序,需要输入密码.
无论如何,这意味着有办法拦截卸载程序,以防止卸载或完成一些最终工作.
我虽然不可能,但我注意到NQ Mobile Security能够在我点击卸载之后和调用PackageUninstaller之前显示一条消息.我想在我的应用程序中复制此行为.
我试着用一个Activity监听"android.intent.action.DELETE"意图,如下所示: 如何知道我的应用程序是从设备中卸载的?
但是当我即将卸载我的应用程序时,选择器弹出要求选择我的应用程序或程序包卸载程序.我怎么能避免这个?
是否有不同的方法拦截您的应用程序UNINSTALL事件?(在回答不可能之前,请尝试卸载NQ移动安全,看看会发生什么.在我的Android 2.3.4上,它显示了一个很好的屏幕,说没有安全应用程序是不安全的).
有没有人知道在卸载我的应用程序时是否可以覆盖特定方法?发生这种情况时,最好从服务器端数据库中删除这些用户.
我想知道一旦用户为我的应用程序选择卸载按钮,如何删除文件夹.我通过编程方式想要它是否有机会这样做...如果是这样,请让我知道可能的解决方案.提前致谢.
我正在开发Android服务。服务停止时,onDestroy将按预期方式调用。但是,当我在服务运行时卸载应用程序时,onDestroy不会调用,因此应用程序没有机会自行清理。
这正常吗?卸载应用程序后,如何执行服务的关机/清理逻辑?