【问题标题】:How to get package name after lollipop version in android如何在android中的棒棒糖版本后获取包名
【发布时间】:2017-03-07 10:47:08
【问题描述】:

我已尝试使用以下代码获取前台应用程序包名称,但它仅获取我自己的应用程序应用程序包名称。其他应用程序包名称将为空。这意味着它返回空...我怎样才能获得包名称..还有其他方法吗?我知道 getrunningappprocess 被谷歌阻止了。

(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    List<ActivityManager.RunningAppProcessInfo> tasks = manager.getRunningAppProcesses();
    String mpackageName = tasks.get(0).processName;
    UsageStatsManager usage = (UsageStatsManager) this.getSystemService(this.USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();

    List<UsageStats> appList = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
    if (appList != null && appList.size() > 0) {
        SortedMap<Long, UsageStats> runningTask = new TreeMap<Long, UsageStats>();
        for (UsageStats usageStats : appList) {
            runningTask.put(usageStats.getLastTimeUsed(), usageStats);
        }
        if (!runningTask.isEmpty() && runningTask != null) {
            mpackageName = runningTask.get(runningTask.lastKey()).getPackageName();
        }
    }
    for (int i = 0; pakageName != null && i < pakageName.size(); i++) {
        Log.e("AppCheck", "comfor2 : " + mpackageName + "    pak2 : " + pakageName.get(i));
        if (mpackageName.equals(pakageName.get(i))) {
            currentApp = pakageName.get(i);
            return true;
        }
    }
}

【问题讨论】:

    标签: android android-service android-package-managers


    【解决方案1】:

    从下面的方法中获取类名...

    public static void classNameRunning(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            // print log for class name
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                Log.w("Package name ==> ",componentInfo.getPackageName());
            }
        }
    
    
    }
    

    【讨论】:

    • 也写getPackageName().getClass() .. 可能会有帮助
    【解决方案2】:
    public static HashSet<String> getRunningApps(Context context) {
    final HashSet<String> hashSet = new HashSet<String>();
    final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    final PackageManager packageManager = context.getPackageManager();
    List<RunningTaskInfo> runningTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
    for (RunningTaskInfo runningTaskInfo : runningTasks) {
        String packageName = runningTaskInfo.baseActivity.getPackageName();
        try {
            String appName = packageManager.getApplicationInfo(packageName, 0).loadLabel(packageManager).toString();
            hashSet.add(appName);
        } catch (NameNotFoundException exception) {
            // handle Exception
        }
    }
    return hashSet;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2015-06-06
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多