Как вывести список всех APK с установленным флагом isGame значением true? - PullRequest
0 голосов
/ 16 июня 2020

Я получил этот код:

_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, и оба приложения получили isGame: true установлено в их файлах AndroidManifest. xml.

В приведенном выше коде категории моих приложений перечислены как «Неопределенные», это включает в себя 2 мои игры, это похоже на почти все мои приложения, кроме некоторых Приложение AUDIO, которое воспроизводит музыку c.

Итак, в конце концов, почему мой код не работает?

Я переходил по этим ссылкам:

Как чтобы проверить, является ли приложение игрой или нет программно?

Кроме того, я нашел вот что меня очень беспокоит:

Как проверить, является ли приложение игрой или нет android?

Итак, в конце концов, возможно ли теперь проверить, является ли приложение игрой или нет?

Мой уровень API 28 +

1 Ответ

0 голосов
/ 17 июня 2020

Конечно, я искал 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, похоже, не работает как и должно быть.

Это сработало для меня и, надеюсь, следующего парня в той же проблеме :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...