簡體   English   中英

Android:如何檢查應用程序是否正在運行

[英]Android: How to check application is Running or not

我需要按packageName檢查-是否正在運行應用程序。 在第21版之前,我只是獲得正在運行的應用程序和舞蹈的列表。 但現在它不起作用-僅返回我的應用程序之一。 我知道我需要使用“統計信息用法”,但找不到完整的示例。

我不需要所有這些分析,我需要一個簡單的功能

bool isRunning(String packageName)

如何在不跳舞的情況下在新的Android(> 21)上實現它?

UPD。 最好的答案是code4rox。 一切都很好,謝謝!

我將以下代碼用於檢查權限:

import android.content.pm.PackageManager;
import android.content.pm.ApplicationInfo;
import android.app.AppOpsManager;
import android.util.Log;
import  android.provider.Settings;

try {
            PackageManager packageManager = getContext().getPackageManager();
            ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getContext().getPackageName(), 0);
            AppOpsManager appOpsManager = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
            int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
            if (!(mode == AppOpsManager.MODE_ALLOWED)) {
                Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                startActivity(intent);
            }
        } catch (PackageManager.NameNotFoundException e) {}

而這對於支票應用程序:

import android.util.Log;
import android.app.usage.UsageStatsManager;
import android.app.usage.UsageStats;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.ArrayList;

public boolean isRunning(Context context, long timeMills, String app) {
        boolean result = false;
        //timeMils = 1000
        UsageStatsManager usm = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,  time - timeMills, time);
        if (appList != null && appList.size() > 0) {
            for (UsageStats usageStats : appList) {
                String appname = usageStats.getPackageName();
                Log.i("DOM_LAUNCHER", "Running app: " + appname);
                if (app.equals(appname)) {
                    result = true;
                }
            }
        }
        return result;
    }

您可以訪問文檔。 向下滾動到方法部分。 其中一些方法需要許可,而某些方法僅用於調試。 希望能有所幫助。

出於安全原因,沒有任何方法可以使所有正在運行的應用程序處於API級別(> 21)。

您可以使用UsageStatsManager按以下時間間隔訪問應用使用歷史記錄和統計信息:天,周,月和年

這是官方文檔鏈接

其他應用程序,例如clean master,ccleaner都使用此技術來獲取正在運行的應用程序。

是使用UsageStatsManager獲取應用列表的UsageStatsManager

注意:使用UsageStatsManager之前,必須先授予“ 使用權限”訪問權限

暫無
暫無

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

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