我可以看到你想要去的地方,但我认为你需要重新考虑一下这种方法。您应该始终允许用户按照自己的意愿安装和卸载。但您可以在应用程序中进行检查,以查看该应用程序首次安装的时间。
PackageInfo info = pm.getPackageInfo(packageName, 0);
long firstInstallTime = info.firstInstallTime;
这将存储应用程序首次安装的时间firstInstallTime
此时间戳不会随着任何次数的后续卸载和重新安装而改变。
The 封装信息 http://developer.android.com/reference/android/content/pm/PackageInfo.html类提供了许多有关设备上的应用程序的其他有用信息,非常值得了解。
您可以将其与上次修改应用程序源目录时的时间戳(即最近安装应用程序时)进行比较,您可以通过以下方式获取该时间戳:
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(packageName, 0);
long mostRecentInstallTime = new File(appInfo.sourceDir).lastModified();
我还使用这种方法为用户提供为期 1 周的应用程序完整功能试用期,然后再恢复到较小的“免费模式”,并且他们不会因为卸载和重新安装而出错。
额外的:
回应您的评论...
您不仅限于获取您自己的应用程序或在您的应用程序之后安装的应用程序的 PackageInfo。您可以获取设备上当前所有应用程序的 PackageInfo,无论它们是在“设备生命周期”内何时安装的。
发现这个代码稍作修改的版本here http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon将为您提供设备上所有应用程序的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
所以你应该拥有你需要的一切。