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



我得到了这个代码:

_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,我打开了APK,两个应用程序都在AndroidManifest.xml文件中设置了isGame:true。

上面的代码将我的应用程序的类别列为未定义,这包括我的 2 个游戏,除了一些播放音乐的 AUDIO 应用程序外,几乎所有应用程序都是如此。

那么,最后,为什么我的代码不起作用?

我正在关注以下链接:

如何以编程方式检查应用程序是否是游戏?

另外,我发现了这个,这让我很担心:

如何检查应用程序是游戏还是不是安卓?

所以最后,现在是否有可能检查一个应用程序是否是游戏?

我的 API 等级是 28+

当然,我搜索了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似乎无法正常工作。

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

最新更新