Мне нужно проверить по packageName - запущено приложение или нет.До v.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;
}