查明之前是否安装了特定的 Android 应用程序

2024-01-24

我有一个应用程序,它为您提供各种应用程序的列表,您可以从 Play 商店下载并安装这些应用程序来赚取好东西。现在,我不希望用户卸载以前安装的应用程序和再次下载通过我的应用程序并赚取好东西。

有没有办法查明用户设备上以前是否安装过特定应用程序?

Update我对所有安装/卸载的应用程序感兴趣,无论我的应用程序何时安装。我不想在我的终端上存储有关任何应用程序安装的任何数据,我想知道这些数据是否已存储在设备上的某个位置以供进一步参考。

Note我也对我们卸载的应用程序感兴趣。我也能得到这个数据吗?


我可以看到你想要去的地方,但我认为你需要重新考虑一下这种方法。您应该始终允许用户按照自己的意愿安装和卸载。但您可以在应用程序中进行检查,以查看该应用程序首次安装的时间。

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所以你应该拥有你需要的一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查明之前是否安装了特定的 Android 应用程序 的相关文章

  • 如何为ScrollView放置固定图像背景?

    我应该想要滚动视图滚动 而不是背景中的图像 将图像添加到滚动视图框架之前的视图层次结构的较高位置
  • 找不到参数的方法 dependencyResolutionManagement()

    我正在尝试使用老师给我的一个项目 但它显示了一个错误 Settings file Users admin AndroidStudioProjects HTTPNetworking settings gradle line 1 A probl
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • 找不到 com.google.firebase:firebase-core:9.0.0 [重复]

    这个问题在这里已经有答案了 在遵循有些不一致的指示之后here https firebase google com docs admob android quick start name your project and here http
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 找不到处理意图 com.instagram.share.ADD_TO_STORY 的活动

    在我们的 React Native 应用程序中 我们试图让用户根据视图 组件中的选择直接将特定图像共享到提要或故事 当我们尝试直接使用 com instagram share ADD TO FEED 进行共享时 它以一致的方式完美运行 但是
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位

随机推荐

  • 由Environment.FailFast() 创建的应用程序转储位于磁盘上的哪个位置?

    我正在尝试在我的应用程序中使用Environment FailFast MSDN 文档说它会在应用程序终止期间创建应用程序转储 FailFast方法将消息字符串写入Windows 应用程序事件日志 创建应用程序的转储 进而 终止当前进程 消
  • 在具有离散颜色条的 pcolormesh 图中使用扩展

    我正在尝试使用离散颜色条创建 pcolormesh 图 输出应满足以下标准 第一层应该是白色的 数据应该在某种程度上被切断 截止值以上的数据应具有单独的颜色 即颜色图的最后一个颜色 我已经快到了 但是 extend 关键字的行为与我预期的不
  • 从 VS 2010 转换为 VS 2012 的项目中缺少 vcxproj.filters 文件

    我正在将我的解决方案移至 TFS 环境 在 VS 2010 中创建并迁移到 VS 2012 的几 8 个 旧 C 项目缺少 vcxproj filters 文件 这些项目看起来很高兴并且满足于没有 filters 的生活 但是当我尝试从 V
  • 在闪亮的多列中对齐单选按钮

    在我闪亮的应用程序中 我有 4 个单选按钮 我想将它们渲染为两列和两行 但是 当我运行应用程序时 标题标签占据第一个位置 使其在第一列中三行 在第二列中两行 这里的问题是 第二列中的第一个单选按钮与标签对齐 而不是第一列中的第一个单选按钮
  • 如何使我的搜索表单适用于大写和小写

    我希望我的搜索表单可以使用大写和小写 因此 每当我输入小写内容时 它也会在我正在搜索的表中显示大写结果 这是我的 JavaScript function searchFunction var searchText document getE
  • R 项目组合

    我正在使用 R 希望找到消费者之间最常见的配对 consumer c 1 1 1 1 1 2 2 2 2 3 3 4 4 4 4 5 items c apple banana carrot date eggplant apple banan
  • MT5/Metatrader 5 使用python连接不同的MT5终端

    我有多个使用以下代码连接到 Mt5 终端的 python 程序 Establish connection to the MetaTrader 5 terminal if not mt5 initialize C Program Files
  • 无法在 Windows 10 ssh 服务器上使用公钥登录

    我已经安装了 Windows 10 ssh 软件包并设置了 sshd 使用密码登录效果很好 但我无法使用公钥登录 我有同样的authorized keys文件输入 ssh authorized keys正如我在 Linux 机器上所做的那样
  • 在 gevent 应用程序中,如何杀死所有已启动的 greenlet?

    我有一个 gevent 应用程序 可以跨多个模块生成多个 greenlet 我希望能够正常关闭应用程序 无论是内部还是通过捕获SIGTERM 例如 允许 greenlet 通过捕获来很好地终止GreenletExit并执行finally 条
  • 转储整个数组:console.log 和 console.dir 输出“... NUM more items]”

    我正在尝试记录一个长数组 以便可以在终端中快速复制它 但是 如果我尝试记录数组 它看起来像 item item gt gt more items lt lt lt 399 more items 如何记录整个数组以便我可以快速复制它 Sett
  • Tkinter:设置“比例”值而不触发回调?

    我有一个 Tkinter GUI 其中有一个Scale目的 我分配了一个回调 由command构造函数参数 以在用户更改刻度位置时执行操作 然而 也存在一种情况 刻度表示的值被外部修改 所以我使用设置刻度位置Scale set 在这种情况下
  • 如何在 Bitbucket 项目中使用 SSH 密钥?

    我在 Bitbucket 中生成和使用 SSH 密钥的步骤 ssh keygen t rsa C my email cat ssh id rsa pub 复制我的钥匙ssh rsa AAAAB3Nz my email到剪贴板 在 bitbu
  • 在指令模板内如何让 Angular ui-router ui-sref 工作?

    基本上 我正在尝试更改 自定义 ui bootstrap accordion 的行为 除了与 ui router 的集成之外 一切正常 这是我想要使用手风琴的方式
  • Jaxb:为固定值属性生成常量值

    我目前正在开发一个使用以下结构的 xsd
  • Visual Studio 2017 Node.js 异常不起作用

    我刚刚开始使用 VS 2017 Professional 进行 Node js 开发 调试通常可以工作 但是当抛出未捕获的异常时 nodejs 进程会立即停止 并且我没有任何更改来跟踪问题 我还在调试器设置中启用了nodejs exptio
  • 通过安装程序 (MSI) Windows 7 更新 Node.js 时看不到最新版本

    我正在尝试更新 Windows 7 机器上的节点 但在重新安装 更新节点后我没有看到最新版本 我只是出去http nodejs org download http nodejs org download 并获取最新的 Windows 安装程
  • 用户友好且难以猜测的唯一标识符

    我的团队正在开发一个具有旧数据库的应用程序 该数据库使用两个不同的值作为 Group 对象的唯一标识符 Id是一个自动递增的 Identity 列 其值由插入时的数据库确定 GroupCode由应用程序决定after插入 并且是 Group
  • 优化“where date Between”类型查询的 Dax 和模型

    我正在构建一个模型以允许报告两个单独的数据集 在本例中 我们将说学生数据集和员工数据集 数据集非常独立 两者之间唯一真正的联系是日期 因此从模型的角度来看 有一个学生星型模式和一个员工星型模式 显示的数据是快照类型数据 回答如下问题 对于选
  • 将 OpenCV 代码从 C++ 转换为 Java

    我目前正在尝试将一些遗留代码从 iPhone 迁移到 Android 此代码使用 OpenCV 库进行一些图像处理 总的来说 一切进展顺利 但我被一行代码困住了 我不知道如何将其转换为 Java 代码 Scalar dMean Scalar
  • 查明之前是否安装了特定的 Android 应用程序

    我有一个应用程序 它为您提供各种应用程序的列表 您可以从 Play 商店下载并安装这些应用程序来赚取好东西 现在 我不希望用户卸载以前安装的应用程序和再次下载通过我的应用程序并赚取好东西 有没有办法查明用户设备上以前是否安装过特定应用程序