【问题标题】:Determine how long an Android application (not mine) is visible确定 Android 应用程序(不是我的)可见多长时间
【发布时间】:2012-06-15 16:19:33
【问题描述】:

我正在编写一个应用程序,它需要知道任何给定应用程序对用户可见的时间。

当应用程序打开并且用户不再可见时(onStop()),我的服务是否可以接收任何系统范围的事件?还是我必须求助于定期轮询 ActivityManager?

应用程序 Tasker(http://tasker.dinglisch.net) 似乎能够检测到任何给定应用程序何时可见/不可见。他们只是简单地轮询 ActivityManager,还是有其他方法可以解决这个问题?

参考:
Time that an application is running
How to know for how much long the application is running in android?

【问题讨论】:

    标签: android time visible


    【解决方案1】:

    您可以通过以下方式检测您的应用是否可见:

    在您的所有活动中,设置:

    @Override
    protected void onResume() {
    super.onResume();
    
    VisibilityManager.setIsVisible(true);
    }
    
    @Override
    protected void onPause() {
    VisibilityManager.setIsVisible(false);
    
    super.onPause();
    }
    

    (这可能会导致您为所有将实现此行为的活动定义一个超类)

    然后创建一个 VisibilityManager(这个很基础,你可能需要更高级的东西):

    public class VisibilityManager {
    private boolean mIsVisible = false;
    
    public void setIsVisible(boolean visible) { 
         mIsVisible = visible; 
    }
    
    public boolean getIsVisible() {
         return mIsVisible;
    }
    }
    

    然后,在您的计时器线程中,当倒计时达到零时,您可以终止应用程序:

    if (VisibilityManager.getIsVisible()) {
    finish();
    }
    else {
    showNotification();
    }
    

    【讨论】:

    • 不幸的是,这仅在我监控自己的应用程序时才有效。但是,我需要能够确定不属于我的其他应用程序的运行时间。我目前正在查看 SpareParts 源代码,看看他们是如何做到的。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多