我可以看到你想去哪里,但我认为你需要重新考虑一下这种方法。您应该始终允许您的用户随意安装和卸载。但是您可以检查应用程序以查看该应用程序的首次安装时间。
PackageInfo info = pm.getPackageInfo(packageName, 0);
long firstInstallTime = info.firstInstallTime;
这将存储应用程序首次安装的时间firstInstallTime
此时间戳不会随着任何数量的后续卸载和重新安装而改变。
PackageInfo 类提供了许多有关设备上应用的其他有用信息,非常值得了解。
您可以将其与应用程序源目录上次修改时的时间戳(即应用程序最近安装的时间)进行比较,您可以通过以下方式获取:
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(packageName, 0);
long mostRecentInstallTime = new File(appInfo.sourceDir).lastModified();
我还使用这种方法为用户提供了 1 周的应用程序全部功能试用期,然后再恢复到较小的“免费模式”,并且他们无法通过卸载和重新安装来解决问题。
补充:
回应您的评论...
您不仅限于为您自己的应用程序或在您的应用程序之后安装的应用程序获取 PackageInfo。您可以获取设备上当前所有应用的 PackageInfo,无论它们是何时在“设备生命周期”中安装的。
here 找到的代码稍作修改版本将为您提供设备上所有应用程序的 firstInstallTime:
// Get PackageInfo for each app on the device
List<PackageInfo> packageInfoInstalledPackages = getPackageManager().getInstalledPackages(0);
// Now iterate through to get the info you need.
long[] firstInstallTimes = long[packageInfoInstalledPackages.size()];
for(int i=0;i<packageInfoInstalledPackages.size();i++) {
PackageInfo p = packageInfoInstalledPackages.get(i);
if (p.versionName != null) {
firstInstallTimes[i] = p.firstInstallTime;
}
}
您也可以获取ApplicationInfo,这样您就可以拥有所需的一切。