Мне нужно отобразить экран со всеми установленными приложениями. Я могу сделать это уже, но мне нужно отфильтровать некоторые системные приложения. Я делаю так:
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
Это работает, но проблема в том, что он скрывает приложения, такие как System, Video Player и Sound Recorder. Тем не менее, мне также нужно, чтобы эти приложения отображались. Вопрос в том, как это сделать?
Вам придется фильтровать их вручную с помощью имени процесса, например:
if(appInfo.packageName().equals("com.android.soundrecorder"))
Пожалуйста, напишите больше своего кода, если это не сработает!
Если приложение является несистемным приложением, оно должно иметь запуск 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
}
}
packageName
иFLAG_SYSTEM
были в SDK начиная с уровня API 1: developer.android.com/reference/android/content/pm/…