我嘗試了一些方法,但沒有成功,幫助我。如何從android中獲取應用安裝時間
28
A
回答
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
47
在API級9(薑餅)以上,還有的PackageInfo.firstInstallTime字段,保持毫秒從epoch:
packageManager.getPackageInfo(packageName, 0).firstInstallTime;
我有以下代碼(如果可用)來使用它,並回退到在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讓你在「Unix時間」安裝時間(時間我自「時代」,即1970年1月1日00:00:00 UTC)以來的毫秒數。您可以使用java.util.Date或java.text.DateFormat來格式化這個時間。
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();
}
您還可以用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. 獲取應用程序在Android 2.2中安裝時間?
- 2. 如何獲取Android中已安裝應用程序的列表?
- 3. Android應用程序的安裝時間?
- 4. 如何從android中的時間選擇器獲取時間?
- 5. 如何獲取應用程序安裝目錄手機間隙android
- 6. 如何獲取android APK安裝進度?
- 7. 如何安裝從Android中的服務器獲取的layout xml
- 8. 獲取Facebook應用程序安裝時間戳
- 9. 從Android Market安裝應用程序後獲取引薦者
- 10. 從安裝的Android應用程序獲取數據
- 11. 的Android - 安裝的應用程序列表獲取時間過長
- 12. 如何從Android手機獲取已安裝應用程序的源文件?
- 13. Android從eclipse下載SDK獲取讀取超時沒有安裝
- 14. 如何獲取在Android中使用gps的已安裝應用程序列表?
- 15. Android獲取第一個安裝時間返回錯誤
- 16. 如何從美國時間獲取反向時間的Android
- 17. 如何從安裝項目獲取安裝路徑
- 18. 安裝hexo-cli時從NPM獲取UNABLE_TO_VERIFY_LEAF_SIGNATURE
- 19. android-獲取應用程序安裝在設備中的異常
- 20. 在Unity中獲取Android安裝的應用程序圖標
- 21. 如何在android中獲取已安裝的應用程序名稱?
- 22. 如何獲取應用程序的安裝日期在C#中
- 23. 如何從jquery中獲取時間Timepicker
- 24. 如何從系統中獲取時間?
- 25. 如何從Android的任何時區獲取具體時間?
- 26. 如何在android服務中獲取url/website的響應時間?
- 27. 如何獲取Android Studio中已安裝/未安裝的依賴項的列表
- 28. 獲取從安裝項目
- 29. 從應用程序安裝上從互聯網獲取數據android
- 30. 如何從android中的SimpleDateFormate()獲取時間?
你可以添加幾百個詞來解釋你所指的是什麼嗎? – CommonsWare 2010-05-14 01:35:52
我想他想知道應用何時安裝。 – Macarse 2010-05-14 02:41:41
誰告訴我,如何獲取安裝的List應用程序,它由用戶安裝,非系統。 – jezz 2010-05-14 07:22:10