Android相当于applicationDidBecomeActive和applicationWillResignActive(来自iOS)

时间:2012-01-13 06:34:19

标签: android

我希望它存在。

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

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

EDIT
我尝试将Application类扩展为registerActivityLifecycleCallbacks()并意识到我将无法使用此方法,因为它仅在API Level 14 +中可用

2 个答案:

答案 0 :(得分:4)

请允许我分享我如何制作向后兼容的解决方案。

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

我最终制作了一个所有活动都延伸的BaseActivity。

// 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类的等效项,请发表评论,我可以发布必要的代码。

答案 1 :(得分:2)

请参阅android中的Application class。扩展这个课程。

希望这可以帮到你