如何知道特定的应用程序是否出现在前台?

时间:2016-08-01 11:21:27

标签: java android

检查应用程序,例如Instagram是否由用户启动。

注意:我的应用程序针对的是棒棒糖及Android上面的版本

2 个答案:

答案 0 :(得分:0)

是的,唯一可行的方法是通过辅助功能服务。查看此页面以了解如何创建它。 https://developer.android.com/training/accessibility/service.html他们还需要通过服务启用服务 - >辅助功能屏幕。

AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED您可以查询前面的包,以确定Instigram是否位于顶部。

您肯定不想使用getRunningTasks,因为该功能已在Android 5.0 +中修改

答案 1 :(得分:0)

我发现我可以通过使用使用权限功能来实现这一目标。

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static String getForegroundProcess(Context context) {
    String topPackageName = null;
    UsageStatsManager usage = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();
    List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*1000, time);
    if (stats != null) {
        SortedMap<Long, UsageStats> runningTask = new TreeMap<Long,UsageStats>();
        for (UsageStats usageStats : stats) {
            runningTask.put(usageStats.getLastTimeUsed(), usageStats);
        }
        if (runningTask.isEmpty()) {
            return null;
        }
        topPackageName =  runningTask.get(runningTask.lastKey()).getPackageName();
    }
    if(topPackageName==null) {
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        context.startActivity(intent);
    }

    return topPackageName;
}

现在不断检查所需的应用是否在前台。

String fg=getForegroundProcess(getApplicationContext());
    if(fg != null && fg.contains("com.instagram.android")){
       //Instagram is in foreground
    }else {

    }

我通过工作服务连续运行上述代码。哪些可用 棒棒糖及以上。