我希望它存在。
我想存储应用程序失去焦点的时间,然后检查它是否已经失去焦点超过n分钟来打开一个锁。
看到应用程序是如何由活动组成的,我认为不会有直接的等价物。我如何才能达到类似的结果呢?
编辑
我尝试将应用程序类扩展到registerActivityLifecycleCallbacks(),并意识到我不能使用这种方法,因为它只在API级14+中可用
发布于 2012-01-14 08:23:52
请允许我分享我是如何实现向后兼容的解决方案的。
如果有与帐户关联的密码,我已经在启动时实现了应用程序的锁定。为了完成任务,我需要处理其他应用程序(包括home活动)接管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类的等价物时遇到困难,请发表意见,我可以发布必要的代码。
https://stackoverflow.com/questions/8846811
复制相似问题