androidbroadcastreceiverpackageandroid-applicationinfopackage-name

Extracting the package name of the last installed app on my phone


I am writing a code to extract the package name, application name, and icon from the last installed app on my phone. I can get the application common name and icon from the application info, but I can't seem to figure out how to get the package name. All the codes that I have found to get the package name give me the package name of MY app, not the last installed app.

It seems like I need to find a method to get the package name, where I can pass in the application info as the parameter (like I do for the application common name and icon).

final PackageManager pm = context.getPackageManager();
ApplicationInfo ai;
try {


ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0);
Log.d("tag_name","Application Info" + ai);


PACKAGE_NAME = context.getApplicationContext().getPackageName();
Log.d("tag_name","Package Name" + PACKAGE_NAME);



} catch (final PackageManager.NameNotFoundException e) {
ai = null;
}


final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
Log.d("tag_name", "Application NAME" + applicationName);



// http://www.carbonrider.com/2016/01/01/extract-app-icon-in-android/

try {

Drawable icon = context.getPackageManager().getApplicationIcon(ai);
Log.d("tag_name", "ICON" + icon);}
catch (Exception e){}

Solution

  • Firstly receive all apps with this Code :

    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA);
    

    Then sort the packages list with this code :

     Collections.sort(packages, new Comparator<PackageInfo>() {
                    @Override
                    public int compare(PackageInfo p1, PackageInfo p2) {
                        return Long.toString(p2.firstInstallTime).compareTo(Long.toString(p1.firstInstallTime));
                    }
                });
    

    Then you can receive the package Name of the latest installed app this way:

    packages.get(0).packageName