首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓相当于applicationDidBecomeActive和applicationWillResignActive(来自iOS)

安卓相当于applicationDidBecomeActive和applicationWillResignActive(来自iOS)
EN

Stack Overflow用户
提问于 2012-01-13 14:34:19
回答 1查看 4.3K关注 0票数 4

我希望它存在。

我想存储应用程序失去焦点的时间,然后检查它是否已经失去焦点超过n分钟来打开一个锁。

看到应用程序是如何由活动组成的,我认为不会有直接的等价物。我如何才能达到类似的结果呢?

编辑

我尝试将应用程序类扩展到registerActivityLifecycleCallbacks(),并意识到我不能使用这种方法,因为它只在API级14+中可用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-14 08:23:52

请允许我分享我是如何实现向后兼容的解决方案的。

如果有与帐户关联的密码,我已经在启动时实现了应用程序的锁定。为了完成任务,我需要处理其他应用程序(包括home活动)接管n分钟的情况。

我最终做了一个我所有活动都可以扩展的BaseActivity。

代码语言:javascript
复制
// DataOperations is a singleton class I have been using for other purposes.
/* It is exists the entire run time of the app
   and knows which activity was last displayed on screen.
   This base class will set triggeredOnPause to true if the activity before
   "pausing" because of actions triggered within my activity.  Then when the
   activity is paused and triggeredOnPause is false, I know the application
   is losing focus.

   There are situations where an activity will start a different application 
   with an intent.  In these situations (very few of them) I went into those 
   activities and hard-coded these lines right before leaving my application

   DataOperations datao = DataOperations.sharedDataOperations();
   datao.lostFocusDate = new Date();
*/

import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.util.Log;

public class BaseActivity extends Activity {
    public boolean triggeredOnPause;

    @Override 
    public void onResume(){
        super.onResume();
        DataOperations datao = DataOperations.sharedDataOperations();
        if (datao.lostFocusDate != null)    {
            Date now = new Date();
            long now_ms = now.getTime();
            long lost_focus_ms = datao.lostFocusDate.getTime();
            int minutesPassed = (int) (now_ms-lost_focus_ms)/(60000);
            if (minutesPassed >= 1) {
                datao.displayLock();
            }
                    datao.lostFocusDate = null;
        }
        triggeredOnPause = false;
    }

    @Override
    public void onPause(){
        if (triggeredOnPause == false){
            DataOperations datao = DataOperations.sharedDataOperations();
            datao.lostFocusDate = new Date();
        }
        super.onPause();
    }
    @Override
    public void startActivity(Intent intent)
    {
        triggeredOnPause = true;
        super.startActivity(intent);
    }
    @Override
    public void startActivityForResult(Intent intent, int requestCode)  {
        triggeredOnPause = true;
        super.startActivityForResult(intent, requestCode);
    }

}

如果您要使用此解决方案,并且在实现我的DataOperations类的等价物时遇到困难,请发表意见,我可以发布必要的代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8846811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档