I am using react-native-android-installed-apps for my react native application.
I want to get list of app names and their package names that are shown in launcher only.
The methods used in this package are not giving me desired output. Like getApps() gets everything, getNonSystemApps() skips Messaging and Phone apps, and getSystemApps() gets everything.
I could filter out system packages that I don't want from javascript but that's not good solution as I can't filter system apps on all kind of devices.
So I went out to .\node_modules\react-native-android-installed-apps\android\src\main\java\com\androidinstalledapps\RNAndroidInstalledAppsModule.java where the library code is.
And tried adding these 3 lines from here. But failed
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(mainIntent, 0);
How can I modify the following code to get desired output with apps shown in Launcher only.
public void getApps(Promise promise) {
try {
PackageManager pm = this.reactContext.getPackageManager();
List<PackageInfo> pList = pm.getInstalledPackages(0);
WritableArray list = Arguments.createArray();
for (int i = 0; i < pList.size(); i++) {
PackageInfo packageInfo = pList.get(i);
WritableMap appInfo = Arguments.createMap();
appInfo.putString("packageName", packageInfo.packageName);
appInfo.putString("versionName", packageInfo.versionName);
appInfo.putDouble("versionCode", packageInfo.versionCode);
appInfo.putDouble("firstInstallTime", (packageInfo.firstInstallTime));
appInfo.putDouble("lastUpdateTime", (packageInfo.lastUpdateTime));
appInfo.putString("appName", ((String) packageInfo.applicationInfo.loadLabel(pm)).trim());
Drawable icon = pm.getApplicationIcon(packageInfo.applicationInfo);
appInfo.putString("icon", Utility.convert(icon));
String apkDir = packageInfo.applicationInfo.publicSourceDir;
appInfo.putString("apkDir", apkDir);
File file = new File(apkDir);
double size = file.length();
appInfo.putDouble("size", size);
list.pushMap(appInfo);
}
promise.resolve(list);
} catch (Exception ex) {
promise.reject(ex);
}
}