如何列出所有isGame标志设置为true的APKs?

问题描述 投票:0回答:1

我得到了这个代码。

_pm = _context.PackageManager;
List<string> packageList = new List<string>();
Intent intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryLeanbackLauncher);
var list = _pm.QueryIntentActivities(intent, PackageInfoFlags.MetaData);
var counter = 0;
foreach (var app in list)
{
    counter++;
    ApplicationInfo ai = _pm.GetApplicationInfo(app.ActivityInfo.PackageName, 0);
    if (filter.Equals(IApplicationsControl.Filter.AppsOnly))
    {
        if (ai.Category != ApplicationCategories.Game)
        {
            Android.Util.Log.Debug("pm", counter + ". " + ai.Category + " - " + app.ActivityInfo.PackageName);
            packageList.Add(app.ActivityInfo.PackageName);
        }
    }
}

输出:

1. Undefined - com.android.vending
2. Undefined - com.google.android.youtube.tv
3. Undefined - com.myApp.test1
4. Undefined - com.android.traceur
5. Undefined - com.arris.android.stb.rcu
6. Undefined - com.arris.upgradetest
7. Undefined - com.clearchannel.iheartradio.application.tvapplication
8. Undefined - com.ericsson.tv
9. Audio - com.google.android.music
10. Undefined - com.google.android.play.games
11. Undefined - com.uei.uassample
12. Undefined - com.FDGEntertainment.redball4.gp       <--- this is a game
13. Undefined - com.fgol.HungrySharkEvolution       <--- this is a game
14. Undefined - com.hyperkani.bomberfriends       <--- this is a game
15. Undefined - com.madfingergames.deadtrigger2       <--- this is a game
16. Undefined - com.secretexit.turbodismount       <--- this is a game
17. Undefined - com.vectorunit.purple.googleplay

我安装了几款游戏,比如Hungry Shark和DeadTrigger2,我打开APKs,这两款应用的AndroidManifest.xml文件中都设置了isGame:true。

上面的代码是把我的应用的类别列为Undefined,这包括我的2个游戏,几乎我所有的应用都是这样,除了一些播放音乐的AUDIO应用。

那么,说到底,为什么我的代码不能用呢?

我是按照这个链接来的。

如何检查应用程序是否为游戏程序?

另外,我还发现了这个,我很关心。

如何检查应用程序是否为游戏?

所以说到底,现在是否可以检查一个应用是否是游戏?

我的API lvl是28+

c# android xamarin
1个回答
0
投票

当然,我找了2天都没找到答案,最后决定在这里发个问题,当然现在我找到了答案。

_pm = _context.PackageManager;
List<string> packageList = new List<string>();
Intent intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryLeanbackLauncher);
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);
    }

}

我做了什么?我很幸运地看到,ApplicationInfo变量ai,得到了一个字段Flags,其中包含了正确的标志,(不是FLAG_IS_GAME标志,也不是ApplicationCategories.Game))同时,我还找到了正确的类来选择IsGame(ApplicationInfoFlags.IsGame)

剩下的就简单了。

结论是,获取应用程序是游戏或不是游戏类别的信息的方法,或者FLAG_IS_GAME似乎没有工作,因为它应该。

这对我来说是有效的,希望下一个遇到同样问题的人:)

© www.soinside.com 2019 - 2024. All rights reserved.