我正在创建一个Android应用程序,它将在5个应用程序商店中以精简(免费)和完整版本打包和分发。
该应用包含由Service
触发的AlarmManager.setRepeating(...)
,因此它会以用户可配置的时间间隔触发,通常在每5分钟和每小时之间触发。
我预见到的问题是,用户可能会使用该应用的免费版和完整版,并且可能来自多个商店。我该怎么做才能防止Service
触发AlarmManager
的多个实例?是否有助于确保清单中的Service
名称(包名称和<service>
属性)相同?是否有一种方法可以在第一次启动应用程序的一个变体时禁用其他变体请求的待处理意图?
答案 0 :(得分: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;
}
如何通过调用意图卸载程序包在此处描述:Implicit intent to uninstall application?