Как отфильтровать некоторые приложения?

1

Мне нужно отобразить экран со всеми установленными приложениями. Я могу сделать это уже, но мне нужно отфильтровать некоторые системные приложения. Я делаю так:

if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)

Это работает, но проблема в том, что он скрывает приложения, такие как System, Video Player и Sound Recorder. Тем не менее, мне также нужно, чтобы эти приложения отображались. Вопрос в том, как это сделать?

Теги:
list
filter
android-applicationinfo

2 ответа

2
Лучший ответ

Вам придется фильтровать их вручную с помощью имени процесса, например:

if(appInfo.packageName().equals("com.android.soundrecorder"))

Пожалуйста, напишите больше своего кода, если это не сработает!

  • 0
    Это сработало, большое спасибо. Я просто надеюсь, что это работает и с другими версиями Android тоже.
  • 0
    Он должен хорошо работать с другими версиями Android, packageName и FLAG_SYSTEM были в SDK начиная с уровня API 1: developer.android.com/reference/android/content/pm/…
1

Если приложение является несистемным приложением, оно должно иметь запуск Intent, с помощью которого он может быть запущен. Если целью запуска является null, то это системное приложение.

Пример системных приложений: "com.android.browser.provider", "com.google.android.voicesearch".

Для вышеуказанных приложений вы получите NULL, когда вы запрашиваете запуск Intent.

PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo packageInfo:packages){
    if( pm.getLaunchIntentForPackage(packageInfo.packageName) != null ){
                String currAppName = pm.getApplicationLabel(packageInfo).toString();
               //This app is a non-system app
    }
    else{
        //System App
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню