【问题标题】:Can code be called when my Android application is uninstalled?卸载我的 Android 应用程序时可以调用代码吗?
【发布时间】:2011-07-05 04:26:55
【问题描述】:

有谁知道卸载我的应用程序时是否可以覆盖特定方法?发生这种情况时,最好从服务器端数据库中删除这些用户。

【问题讨论】:

  • 如果您找到了答案,任何指针都会有很大帮助。过去两天我一直在为此苦苦挣扎。
  • 不 - 我没有找到解决方案。您最好的选择是我在下面接受的答案。
  • 直接从 GPlay 卸载时我什么都没做

标签: android


【解决方案1】:

不幸的是,Android 包目前无法在删除时执行代码。但是,您可以为ACTION_PACKAGE_REMOVED 注册BroadcastReceiver在不同的包中,当从手机中删除包时将调用该包。

另见this question

【讨论】:

  • 如何在不同的包中注册ACTION_PACKAGE_REMOVED
  • @GauravAgarwal 让用户从 Play 商店或资产文件夹安装您的另一个应用程序
【解决方案2】:

我知道我迟到了,但我猜因为你卸载应用程序足以让服务器上的用户感到震惊(而不是用户明确选择“删除我的帐户”选项),我会在服务器/服务端创建一个作业,每 N 个时间单位(例如 30 天)扫描非活动用户并删除它们。为什么?永远不会连接到服务器的应用与卸载的应用一样好。

但是,您可以在您的应用中构建逻辑来处理那些从未卸载应用但未登录超过 N 个单位时间的用户最终返回的情况。然后,您可以:

  1. 让应用程序向服务器发送一个特殊的“我已经安装”cookie,然后指示应用程序向它发送足够的应用程序端缓存信息以在服务器上重建用户数据,同时说“请稍候,正在同步与服务器......”。只要用户数据不是很大(例如,某种图像库),这应该可以工作,如果是,那么您最好的选择是用粗体字表明非活动帐户将是已删除。
  2. 或者,当然,您也可以将应用重置为原始状态,并希望用户不会讨厌您。

您可以安装一个服务作为应用程序的一部分,该服务每天唤醒一次,当 WiFi 可用且设备处于交流电源时,向您的服务发送“心跳”说“我”米安装”。如果心跳停止超过几天,您可以假设用户卸载了应用程序并删除了用户数据。但请注意,这并非万无一失,因为用户可能只是将设备关闭了这么多天。在这种情况下,您现在必须处理系统中不再处于活动状态的用户的心跳进入的情况,此时您将需要像以前一样构建重建逻辑(这对您没有任何好处)建立心跳的痛苦,非常感谢很多)。

那些讨厌的用户! ;-)

【讨论】:

  • 我想你知道那是开玩笑的:)
【解决方案3】:

是的,有一种方法可以使用 Android 监听应用程序来安装和卸载 App。

应用安装和卸载会在应用安装完成后发送广播,系统会监听android.intent.action.PACKAGE_ADDED广播。 intent.getDataString() 安装的包的名称。当卸载程序系统收听android.intent.action.PACKAGE_REMOVED收音机。同样intent.getDataString() 获取卸载包名。应用无法监听安装和卸载,但覆盖安装可以收听自己的android.intent.action.PACKAGE_REMOVED广播。

示例

AndroidManifest.xml 配置文件:

<receiver android:name="com.sarbjot.MyApp.BootReceiver" >
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package"/>
    </intent-filter>
 </receiver>

而接收方调用:

package com.sarbjot.MyApp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // install call
        if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
            //code here on install
            Log.i("Installed:", intent.getDataString());
        }

        // uninstall call
        if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
            //code here on uninstall
            Log.i("Uninstalled:", intent.getDataString());

        }
    }
}

希望对大家有帮助。

【讨论】:

  • 我无法运行这个 Javascript sn-p。这对你有用吗?
  • 这仅在安装/卸载其他应用程序时有效。也就是说,定义此接收器的应用程序将不会被通知。所以这不是 OP 实际要求的。
【解决方案4】:

是的,您可以通过从设置 -> 管理应用程序 -> 选择特定应用程序中识别点击卸载按钮来处理它。

试试this answer.

希望这会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 2021-04-24
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多