簡體   English   中英

Android:獲取已安裝應用程序的運行時間

[英]Android: get running time of installed apps

我們如何顯示所有已安裝的應用程序的運行時間並獲取應用程序的最后使用情況並顯示它? 我得到所有已安裝的應用程序並顯示它,但我也想顯示應用程序的運行時間。

嘗試這個:

在清單文件中添加:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />
<uses-permission
    android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />

您還需要在運行時獲取 package 使用統計權限

使用此 function 檢查使用統計權限:

@TargetApi(Build.VERSION_CODES.M)
public static boolean hasUsageStatsPermission(Context context) {
    boolean granted = false;
    AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
    int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), context.getPackageName());
    if (mode == AppOpsManager.MODE_DEFAULT)
        granted = (context.checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED);
    else
        granted = (mode == AppOpsManager.MODE_ALLOWED);
    return granted;
}

如果您沒有權限,請使用此代碼將用戶帶到您應用的權限頁面:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY).setData(Uri.parse("package:" + "your package name")))

現在是您獲取所有已安裝應用程序的最后使用時間的實際部分:

PackageManager packageManager = getPackageManager();
List<ApplicationInfo> applicationInfoList = packageManager.getInstalledApplications(0);
UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, -1);
long start = calendar.getTimeInMillis();
long end = System.currentTimeMillis();
stats = usageStatsManager.queryAndAggregateUsageStats(start, end);

for (ApplicationInfo info : applicationInfoList) {
            GetAppInfo(info);
        }

現在GetAppInfo function:

UsageStats usageStats = stats.get(info.packageName);
long lastTimeUsed;
long actualLastTimeUsed;
  if(usageStats!=null){
     lastTimeUsed = usageStats.getLastTimeUsed();
      actualLastTimeUsed = currentTime - lastTimeUsed;
  }

如您所見,僅獲取所有已安裝應用程序的最后使用時間是一個漫長的過程。

注意:請記住在后台/工作線程而不是 UI 或主線程中執行所有這些操作,否則它可能會凍結 ui

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM