在Android上侦听自己的应用程序卸载事件

在Android上侦听自己的应用程序卸载事件,android,android-intent,android-broadcast,Android,Android Intent,Android Broadcast,据我所知,应用程序无法获取自己卸载的意图: 但是呢 当用户进入手机设置中的app manager并单击你的应用程序时,你会收到一条广播,其中包含你的应用程序名,如果用户单击卸载btn,则必须启动com.android.uninstaller.UnistallerActivity 如果您在extras中获得了一个意图和您的应用程序名称,这意味着用户在“应用程序管理器”中单击了您的应用程序,使用PackageManager启动一个活动观察程序,并获取最可见的活动及其包,如果用户单击“卸载”

据我所知,应用程序无法获取自己卸载的意图:

但是呢


当用户进入手机设置中的app manager并单击你的应用程序时,你会收到一条广播,其中包含你的应用程序名,如果用户单击卸载btn,则必须启动
com.android.uninstaller.UnistallerActivity


如果您在extras中获得了一个意图和您的应用程序名称,这意味着用户在“应用程序管理器”中单击了您的应用程序,使用
PackageManager
启动一个活动观察程序,并获取最可见的活动及其包,如果用户单击“卸载”按钮,您将获得“UnistallerActivity”(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(UnistallerActivity)(Uni。以下是我对其工作原理的介绍。

以下是一种获取自己应用程序卸载事件的方法

在本机代码中使用
inotify
。 例如:您可以使用
inotify\u add\u watch
监视应用程序的数据缓存文件夹,如:
/data/data/your package name/cache

卸载应用程序后,您可以获得文件夹的删除事件

另一个关键点是,
inotify
应该在独立于您自己的应用程序的单独进程中运行。
您可以调用
fork()
来执行此操作


我已经验证了逻辑。:)

也许这会有所帮助:大概他们正在利用一些安全漏洞。我会努力找出那个洞并把它修好。谢谢你指出这一点@Commonware我已经发现了它,并询问了他们是如何做到的,在这里:我很高兴地报告,他们的技术从Android 4.4开始就不再有效。@Commonware它在4.4.2上仍然有效您尝试过上面的代码吗?“已注册的BroadcastReceiver将在卸载应用程序之前卸载,因此该BroadcastReceiver不会收到其自身的卸载事件。“除您自己的应用外,每个订阅的应用都将收到一条广播,说明您的应用正在卸载。您能提供一些有关如何在本机代码中实现inotify的详细信息吗?@aarontang当我们卸载时,“inotify”代码将首先执行吗?”?inotify可能会监视应用程序的缓存或数据目录删除事件,并且删除事件仅在android软件包卸载程序删除该缓存/数据目录后发生。那么哪一个先被处决?我想在卸载it应用程序之前更新数据库中的一些值。您好@sergej shafarenka您能链接到说明此问题已解决的文档吗?谢谢
ADB:
        10-20 12:37:00.997: D/BackupManagerService(527): Received broadcast Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:mobi.mgeek.TunnyBrowser flg=0x8000010 (has extras) }
    10-20 12:37:00.997: V/BackupManagerService(527): removePackageParticipantsLocked: uid=10112 #1
    10-20 12:37:01.007: D/dalvikvm(527): GC_EXPLICIT freed 2247K, 12% free 20128K/22868K, paused 3ms+10ms, total 212ms
    10-20 12:37:01.107: D/dalvikvm(527): GC_FOR_ALLOC freed 1508K, 15% free 19649K/22868K, paused 60ms, total 60ms
    10-20 12:37:01.137: D/AndroidRuntime(4028): Calling main entry com.android.commands.am.Am
    10-20 12:37:01.137: D/dalvikvm(4028): Note: class Landroid/app/ActivityManagerNative; has 163 unimplemented (abstract) methods
    10-20 12:37:01.147: I/ActivityManager(527): START u0 {act=android.intent.action.VIEW dat=http://survey.dolphin.com/int/uninstall?id=014f4d1981d6f88bb56630e7a3a7550a&pn=mobi.mgeek.TunnyBrowser&v=248&s=ofw&it=1382250136565&ut=1382250127000&m=Nexus 4&os=android&osv=4.3&cc=US&no=40471&lang=en&jk=uninstalled&ft=212&ht=957&ct=0&nt=1&res=768*1184&ifi=1&lts=1&iow=0&iom=0&iospd=0&iogs=0&debug=false&t=1382252820000 flg=0x10000000 cmp=com.android.chrome/com.google.android.apps.chrome.Main} from pid 4028
    10-20 12:37:01.157: D/AndroidRuntime(4028): Shutting down VM