【问题标题】:How to detect if an android app is a game?如何检测android应用程序是否是游戏?
【发布时间】:2020-06-17 16:16:13
【问题描述】:

在我正在开发的应用程序中,我需要遍历已安装的应用程序并检测哪些是游戏。有没有办法做到这一点?

我正在考虑一个可以搜索包名称并返回其类别的 Play 商店 API,即使它仅限于商店中的应用程序。是否存在类似的东西?有可能吗?

还有其他方法吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    此答案已弃用!
    正确且向后兼容的方法是 here!

    从 Android API 版本 21 开始,终于有一种方法可以检查应用程序是否为游戏。

    PackageManager pm = mContext.getPackageManager();
    ApplicationInfo ai = pm.getApplicationInfo(mPackageName,0);
    if((ai.flags & ApplicationInfo.FLAG_IS_GAME) == ApplicationInfo.FLAG_IS_GAME)
        return true;
    return false;
    

    【讨论】:

    • 游戏不需要设置此标志。
    • 但是开发人员将这个标志放入他/她的应用程序清单有几个很好的理由,其中之一是在 play store 和 android tv 启动器中正确索引。
    【解决方案2】:

    没有自动检测应用是否为游戏的方法。您只需比较包名的公共部分的包名即可。我的解决方案是索引谷歌商店页面并散列包名称。

    我可以通过构建通用前缀来优化我的哈希值。我将包名称作为域处理并grep公共后缀。我使用来自http://publicsuffix.org/ 的列表。

    “公共后缀”是互联网用户可以直接注册名称的后缀。公共后缀的一些示例是 .com、.co.uk 和 pvt.k12.ma.us。公共后缀列表是所有已知公共后缀的列表。

    公共后缀列表是 Mozilla 的一项倡议,但作为社区资源进行维护。它可用于任何软件,但最初是为了满足浏览器制造商的需求而创建的。

    使用此列表,您可以检测包名的一部分是公共前缀。

    【讨论】:

    • 它不是我的,如果它有效,我会对更多方向感兴趣。
    • 但是这样做我应该事先有一份最重要的游戏公司的名单。从应用程序的 Play 商店页面获取类别信息不是更好吗?
    • 我也尝试过,但我发现无法从应用程序中获取类别。我没有办法检测到包com.rovio.angrybirds 是一个游戏。你看到了吗?
    • 啊,你说得对,我错过了。但是没有官方的 API 来获取数据。但是你可以解析 html。
    • 好的,那我就用肮脏的方式来做吧.. :-)
    【解决方案3】:

    对我来说,上述答案不起作用,ApplicationInfo.FLAG_IS_GAME 现在已弃用,使用 API 28+(在我的情况下),您可以执行以下操作:

    _pm = _context.PackageManager;
    List<string> packageList = new List<string>();
    Intent intent = new Intent(Intent.ActionMain);
    intent.AddCategory(Intent.CategoryLeanbackLauncher); // or add any category you want
    var list = _pm.QueryIntentActivities(intent, PackageInfoFlags.MetaData);
    foreach (var app in list)
    {
        ApplicationInfo ai = _pm.GetApplicationInfo(app.ActivityInfo.PackageName, 0);
        var allFlags = ai.Flags;
    
        if (allFlags.HasFlag(ApplicationInfoFlags.IsGame))
        {
            packageList.Add(app.ActivityInfo.PackageName);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多