我正在开发一个应用程序,要求用户在他/她离开应用程序或按主页按钮时输入密码。这将适用于所有应用程序活动。 我已经尝试过Activity生命周期 onResume,onRestart等。但是当从一个活动转移到另一个活动时会调用这些活动。 我也尝试过这段代码
@Override
public void onUserLeaveHint() {
long uiDelta = (System.currentTimeMillis() - userInteractionTime);
super.onUserLeaveHint();
Log.i("bThere","Last User Interaction = "+uiLag);
if (uiDelta < 100)
Log.i("appname","Home Key Pressed");
else
Log.i("appname","We are leaving, but will probably be back shortly!");
但是,这不仅在按下主页按钮时在活动之间切换时也会被调用。
关于如何检测离开应用程序的任何想法?
答案 0 :(得分:0)
您可以检查您的应用是否在后台
1 - 您应该在AndroidManifest.xml中包含android.permission.GET_TASKS
2 - 在您的应用程序类中输入此代码。
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
答案 1 :(得分:0)
您可以在意图上发送一个额外的布尔值,这些意图执行您的活动之间的流程,表明不应该请求密码请求。然后在您的活动onResume
上使用此布尔值一次并将其翻转为假,以便下次恢复活动时将再次请求密码。这应该工作我想。如果有,请告诉我们:)
答案 2 :(得分:0)
用户在“活动”之间切换时删除历史记录。所以他不能使用后退按钮。
答案 3 :(得分:0)
当我想在不再使用应用程序或在后台模式下断开聊天服务器连接时,我也有类似的问题。在iOS中有一个方法
didEnterInBackground()
用于检测应用程序何时处于后台。我在android中寻找类似的行为,但最终使用解决方法来解决。
所以解决了我的问题的解决方案是,我在每个活动的onPause和onResume上添加计时器。在主机活动的onPause上启动计时器,并在目标活动的onResume上停止计时器。因此,如果没有目标活动(后台应用程序或其他应用程序进入),它将自动断开聊天服务器。
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
disconnectChatServer();
}
},1000);
您可以调整延迟,以毫秒为单位。
答案 4 :(得分:0)
/**
*
* @param context
* @return
*/
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
Log.i(String.format("Background App:", appProcess.processName));
return true;
}else{
Log.i(String.format("Foreground App:", appProcess.processName));
return false;
}
}
}
return false;
}
答案 5 :(得分:0)
点击活动或主页按钮时,
Activity的生命周期方法,用于调用的onPause()方法。如果应用程序需要内存用于其他操作,则转移到onStop()方法。
如果我已经澄清你的问题,请告诉我。
感谢。