3

我正在创建一个 Android 应用程序,它将在 5 个应用程序商店中以精简版(免费)和完整版的形式打包和分发。

该应用程序包含一个Servicetrigger by AlarmManager.setRepeating(...),因此它以用户可配置的间隔触发,通常在每 5 分钟和每小时之间。

我预见的麻烦是,用户可能会同时获得该应用程序的免费和完整版本,并且可能来自多个商店。我可以做些什么来防止多个实例Service被触发AlarmManager?确保Service名称(清单中的包名称和<service>属性)相同是否有帮助?有没有一种方法可以让应用程序的一个变体在第一次启动时禁用其他变体请求的待处理意图?

4

1 回答 1

2

不是一个有效的建议:每次AlarmManager启动您的服务时,您都可以检查是否安装了较新的版本(例如完整版)。如果是,则通过向AlarmManager.setRepeating(...)方法提供负间隔毫秒来取消警报。

更清洁的方法将强制删除较旧的安装。首次启动您的应用程序版本时,请检查之前可能安装的其他可能软件包的列表。如果有任何删除它们。属于他们的服务也将被删除。

以下是如何检查包的存在性:

public static boolean isPackageInstalled(Context context, String uri) {
    PackageManager pm = context.getPackageManager();
    boolean installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        installed = false;
        // Not installed
    }
    return installed;
}

此处描述了如何通过调用意图来卸载包:隐式意图卸载应用程序?

于 2012-11-27T16:10:29.533 回答