I need to check is apk installed or not by controlling packageName.(like powerclean app ->app manager ->apkFiles)
For this, i need to get packageName from apk file.(not label)
I already tried this
public void getApkPackage(String pathToApk) {
Process mProcess = null;
try {
mProcess = Runtime.getRuntime().exec("aapt dump badging "+pathToApk);
} catch (IOException e) {
e.printStackTrace();
}
}
But it returns
ava.io.IOException: Error running exec(). Command: [aapt, dump, badging, /storage/emulated/0/asd.apk] Working Directory: null Environment: null
at java.lang.ProcessManager.exec(ProcessManager.java)
......
Caused by: java.io.IOException: Permission denied
at java.lang.ProcessManager.exec(Native Method)
I already added
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
these permissions.
Note: I dont want to get installed or not installed apk names, i already get them with this. I want to get apk packageName..
//get app name from apk
public static String getAppLabel(PackageManager pm, String pathToApk ,Context context) {
PackageInfo packageInfo = pm.getPackageArchiveInfo(pathToApk, 0);
if (Build.VERSION.SDK_INT >= 8) {
// those two lines do the magic:
packageInfo.applicationInfo.sourceDir = pathToApk;
packageInfo.applicationInfo.publicSourceDir = pathToApk;
}
CharSequence label = pm.getApplicationLabel(packageInfo.applicationInfo);
return label != null ? label.toString() : null;
}
More info part:
I want to do exactly the same thing.
1-Get all apk path(except system folder) in phone (already did)
2-Get all installed packages on phone (already did)
3-Get PackageName from founded apks path (problem starts here)
4-Check every founded apks package name inside installed packages(easy part)
5-Add them to 2 arraylist (installed apks - not installed apks)