我希望它存在。
我想存储应用程序失去焦点的时间,然后检查它是否已经失去焦点超过n分钟来锁定。
看看应用程序是如何由活动组成的,我认为不会有直接的等价物。我怎样才能取得类似的结果?
EDIT
我尝试将Application类扩展为registerActivityLifecycleCallbacks()
并意识到我将无法使用此方法,因为它仅在API Level 14 +中可用
答案 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。扩展这个课程。
希望这可以帮到你