2010-05-14 57 views
28

tôi thử một số phương pháp, nhưng không thành công, giúp tôi.Cách nhận thời gian cài đặt ứng dụng từ android

+18

Bạn có thể thêm vài trăm từ giải thích những gì bạn đang đề cập đến không? – CommonsWare

+3

Tôi đoán anh ấy muốn biết khi nào ứng dụng được cài đặt. – Macarse

+0

người cho tôi biết, cách cài đặt ứng dụng Danh sách, ứng dụng được cài đặt bởi người dùng, hệ thống nou. – jezz

Trả lời

52
PackageManager pm = context.getPackageManager(); 
ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0); 
String appFile = appInfo.sourceDir; 
long installed = new File(appFile).lastModified(); //Epoch Time 
+0

cảm ơn bạn, đó là điều tôi muốn. – jezz

+5

Ngoài ra, điều này sẽ hiển thị lần cài đặt cuối cùng *** hoặc cập nhật ***. – orip

+6

Làm thế nào về thời gian cài đặt đầu tiên thực tế và KHÔNG thời gian cập nhật? –

47

Trong mức API 9 (Gingerbread) trở lên, có lĩnh vực PackageInfo.firstInstallTime, giữ mili giây kể từ khi kỷ nguyên:

packageManager.getPackageInfo(packageName, 0).firstInstallTime; 

Tôi có đoạn code sau đây để sử dụng nó nếu có, và rơi trở lại thời gian sửa đổi apk:

// return install time from package manager, or apk file modification time, 
// or null if not found 
public Date getInstallTime(
    PackageManager packageManager, String packageName) { 
    return firstNonNull(
    installTimeFromPackageManager(packageManager, packageName), 
    apkUpdateTime(packageManager, packageName)); 
} 

private Date apkUpdateTime(
    PackageManager packageManager, String packageName) { 
    try { 
    ApplicationInfo info = packageManager.getApplicationInfo(packageName, 0); 
    File apkFile = new File(info.sourceDir); 
    return apkFile.exists() ? new Date(apkFile.lastModified()) : null; 
    } catch (NameNotFoundException e) { 
    return null; // package not found 
    } 
} 

private Date installTimeFromPackageManager(
    PackageManager packageManager, String packageName) { 
    // API level 9 and above have the "firstInstallTime" field. 
    // Check for it with reflection and return if present. 
    try { 
    PackageInfo info = packageManager.getPackageInfo(packageName, 0); 
    Field field = PackageInfo.class.getField("firstInstallTime"); 
    long timestamp = field.getLong(info); 
    return new Date(timestamp); 
    } catch (NameNotFoundException e) {   
    return null; // package not found 
    } catch (IllegalAccessException e) { 
    } catch (NoSuchFieldException e) { 
    } catch (IllegalArgumentException e) { 
    } catch (SecurityException e) { 
    } 
    // field wasn't found 
    return null; 
} 

private Date firstNonNull(Date... dates) { 
    for (Date date : dates) 
    if (date != null) 
     return date; 
    return null; 
} 
10

PackageInfo.firstInstallTime mang đến cho bạn cài đặt thời gian trong "lần Unix" (thời gian i n mili giây kể từ "kỷ nguyên", tức là ngày 1 tháng 1 năm 1970 00:00:00 UTC). Bạn có thể sử dụng java.util.Date hoặc java.text.DateFormat để định dạng thời gian này.

private static final String TAG = "MyActivity"; 

... 
packageName = ... 
... 

try { 
    PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); 

    Date installTime = new Date(packageInfo.firstInstallTime); 
    Log.d(TAG, "Installed: " + installTime.toString()); 

    Date updateTime = new Date(packageInfo.lastUpdateTime); 
    Log.d(TAG, "Updated: " + updateTime.toString()); 
} 
catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 

Bạn cũng có thể thay đổi định dạng ngày bằng java.text.SimpleDateFormat.

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

String installTime = dateFormat.format(new Date(packageInfo.firstInstallTime)); 
Log.d(TAG, "Installed: " + installTime); 

String updateTime = dateFormat.format(new Date(packageInfo.lastUpdateTime)); 
Log.d(TAG, "Updated: " + updateTime); 
+1

Cảm ơn bạn bro, đã làm việc tốt. – vinidog

+1

Không cần thiết để yêu cầu "PackageManager.GET_PERMISSIONS" từ trình quản lý gói nếu bạn chỉ muốn 2 lần đó (chỉ cần chuyển "0") – for3st

Các vấn đề liên quan