如何知道何时关闭我的应用程序?
问题描述:
我的问题很简单,我试图在用户关闭应用程序时禁用我的应用程序的蓝牙。 我需要,如果用户在背景中的应用程序,蓝牙保持活动,但如果用户滑动应用程序在屏幕外,蓝牙关闭。如何知道何时关闭我的应用程序?
我知道如何禁用蓝牙。
if (mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.disable();
}
完美的作品,但我需要调用3线当用户关闭该应用程序,我试着用onDestroy
,,onStop
,但没有人对我的作品。
onDestroy
当用户触摸后退按钮并且任务转到后台时调用方法。 方法在用户触摸最近按钮时调用,但应用程序未关闭。 onStop
方法相同的。
所以...如何知道用户何时关闭应用程序?
谢谢
答
你可以写一个方法来检查,如果应用程序在后台或不运行。
private boolean isAppIsInBackground(Context context) {
isInBackground = true;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (String activeProcess : processInfo.pkgList) {
if (activeProcess.equals(context.getPackageName())) {
isInBackground = false;
}
}
}
}
} else {
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(context.getPackageName())) {
isInBackground = false;
}
}
return isInBackground;
}
如果应用程序在后台运行,则此方法返回true。然后可以相应地启用或禁用蓝牙。 此外,您可以在BaseActivity的onResume和onPause方法中设置一个标志,该方法由所有其他活动扩展,以便您可以检查标志以了解应用程序是否正在运行。
答
拨打BaseActivity并覆盖其的onPause()方法和从BaseActivity延伸 每个Activity。
我也想提一提,多活动之间切换时的onPause()被甚至被解雇,所以你需要跟踪,当它停下来,去到另一个屏幕。
参考:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
答
如果您希望禁用蓝牙当用户退出你的活动,在onBackPressed()
禁用它。
该方法还会创建无意义的“处理程序”,并显示一个弹出窗口。您可以稍微清理它以匹配想要的/广告的功能。剩下的问题就是该方法对它本身没有帮助。因为它会从'onStop'等内部返回'false',因为该应用程序仍然处于前台。 – zapl
该方法检查应用程序是否在后台。只有当它在后台运行时才返回true。这就是为什么我提到使用相应的返回值 – Jas
但OP如何以及在哪里可以使用该方法?该方法不会告诉你在提到的活动生命周期方法里面,应用程序是否*之后会变成背景。 – zapl