我得到了这个代码。
_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+
当然,我找了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似乎没有工作,因为它应该。
这对我来说是有效的,希望下一个遇到同样问题的人:)