我们所知道的通常(在实践中任何)防病毒应用程序在卸载之前用于触发简单的对话框,例如:"你要卸载应用程序,你确定吗?" - "是/否".
是的,我知道我可以使用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的卡巴斯基互联网安全 - 这是卸载它的特殊程序,需要输入密码.
无论如何,这意味着有办法拦截卸载程序,以防止卸载或完成一些最终工作.
我开发了一款Android应用.现在我想在从手机上卸载应用程序时执行一些操作(即 - 重置设置等..).
是否可以重新设置监听器或在删除应用程序时调用的函数?
我虽然不可能,但我注意到NQ Mobile Security能够在我点击卸载之后和调用PackageUninstaller之前显示一条消息.我想在我的应用程序中复制此行为.
我试着用一个Activity监听"android.intent.action.DELETE"意图,如下所示: 如何知道我的应用程序是从设备中卸载的?
但是当我即将卸载我的应用程序时,选择器弹出要求选择我的应用程序或程序包卸载程序.我怎么能避免这个?
是否有不同的方法拦截您的应用程序UNINSTALL事件?(在回答不可能之前,请尝试卸载NQ移动安全,看看会发生什么.在我的Android 2.3.4上,它显示了一个很好的屏幕,说没有安全应用程序是不安全的).