Get Application Installed Date on Android
Asked Answered
K

7

73

Is there are way to find out the "Date when an application was installed" on an Android Device.

Have searched extensively, but unable to find relevant answer.

Was unable to find anything regarding Date when Application was Installed through PackageManager documentation/Code.

Khalkha answered 15/3, 2011 at 12:22 Comment(3)
Please tell, Why do you need this? Isn't it sufficient to know the first launch date?Memnon
This is as per client requirements for one of the projects we are working on.Khalkha
@VladimirIvanov "Please tell why you need this?" #19765167Proletariat
F
150

or this one (API Level 9 upwards!):

long installed = context
    .getPackageManager()
    .getPackageInfo(context.getPackag‌​eName(), 0)
    .firstInstallTime
;
Feign answered 15/3, 2011 at 12:47 Comment(7)
Thanks a lot for your help on the subject.Khalkha
You would be able to get all the other "package info" as well via this link, developer.android.com/reference/android/content/pm/…Mend
Unfortunately this date is reset when the app is uninstalled and reinstalled.Opacity
for all the copy&paste people out there: javalong installDate;try { installDate = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).firstInstallTime;} catch (PackageManager.NameNotFoundException e) { installDate = Calendar.getInstance().getTimeInMillis();}Compte
How about updating app from store? Is this update(change) the date?Fifty
@BogdanShulga updating will not change this date, look also to lastUpdateTime.Iranian
In case of a factory reset what happens to the app. Consider its a system app or google play store. Will the install date change on factory reset?Gisser
A
26

Use this code:

PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0);
String appFile = appInfo.sourceDir;
long installed = new File(appFile).lastModified();
Arvonio answered 15/3, 2011 at 12:41 Comment(2)
Thanks a lot Sunil, We were able to proceed ahead with your valuable inputs above.Khalkha
The time returned here will change every time the package is updated.Mariselamarish
M
12

First Time It Was Installed

activity.getPackageManager().getPackageInfo( activity.getPackageName(), 0 ).firstInstallTime;

Last Time It Was Updated

activity.getPackageManager().getPackageInfo( activity.getPackageName(), 0 ).lastUpdateTime;
Mckinleymckinney answered 3/11, 2018 at 0:55 Comment(0)
S
8

Try one of these

/**
 * The time at which the app was first installed. Units are as per currentTimeMillis().
 * @param context
 * @return
 */
public static long getAppFirstInstallTime(Context context){
    PackageInfo packageInfo;
    try {
    if(Build.VERSION.SDK_INT>8/*Build.VERSION_CODES.FROYO*/ ){
        packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
        return packageInfo.firstInstallTime;
    }else{
        //firstinstalltime unsupported return last update time not first install time
        ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0);
        String sAppFile = appInfo.sourceDir;
        return new File(sAppFile).lastModified();
    }
    } catch (NameNotFoundException e) {
    //should never happen
    return 0;
    }
}
Sternson answered 18/9, 2013 at 20:12 Comment(0)
S
3

This method returns the date of the install in String format like 12/25/2016 10:38:02:

  private String getInstallDate() {
        // get app installation date

        PackageManager packageManager =  getActivity().getPackageManager();
        long installTimeInMilliseconds; // install time is conveniently provided in milliseconds

        Date installDate = null;
        String installDateString = null;

        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(getActivity().getPackageName(), 0);
            installTimeInMilliseconds = packageInfo.firstInstallTime;
            installDateString  = MiscUtilities.getDate(installTimeInMilliseconds, "MM/dd/yyyy hh:mm:ss");
        }
        catch (PackageManager.NameNotFoundException e) {
            // an error occurred, so display the Unix epoch
            installDate = new Date(0);
            installDateString = installDate.toString();
        }

        return installDateString;
    }

MiscUtilities

/**
 * Return date in specified format.
 *
 * @param milliSeconds Date in milliseconds
 * @param dateFormat   Date format
 * @return String representing date in specified format
 * <p>
 * Date myDate = MiscUtilities.getDate(82233213123L, "dd/MM/yyyy hh:mm:ss.SSS");
 */
public static String getDate(long milliSeconds, String dateFormat) {
    // Create a DateFormatter object for displaying date in specified format.
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);

    // Create a calendar object that will convert the date and time value in milliseconds to date.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(milliSeconds);
    return formatter.format(calendar.getTime());
}
Sharma answered 19/12, 2016 at 20:58 Comment(1)
is that MiscUtilities your custom class ?Policy
G
3
public long getInstallDateInMilliseconds() {
    long installDate;
    try {
        installDate = context.getPackageManager()
                      .getPackageInfo(context.getPackageName(),0)
                      .firstInstallTime;
    } catch (PackageManager.NameNotFoundException e) {
        installDate = Calendar.getInstance().getTimeInMillis();
    }
    return installDate;
}
Grenadier answered 5/6, 2020 at 2:56 Comment(1)
Can you offer some explanation of your approach to help people understand your thinking? Also, why might someone take this approach over the accepted answer from a decade ago?Echopraxia
T
0

Go to file manager, then open folder named "Android" and search for apps name is "data" or "obb" folder. The date and time folder was created is the installation date. Tip - some folders have the name of apps creator instead the name of app.

Tribadism answered 8/10, 2023 at 17:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.