如何知道我何时关闭我的应用程序?

时间:2015-10-07 03:45:52

标签: android bluetooth

我的问题很简单,我尝试在用户关闭应用时为我的应用禁用蓝牙。 我需要,如果用户在后台使用应用程序,蓝牙保持活动状态,但如果用户将应用程序滑出屏幕,蓝牙将关闭。

我知道如何禁用蓝牙。

if (mBluetoothAdapter.isEnabled()){
    mBluetoothAdapter.disable();
}

效果很好,但是当用户关闭应用时我需要拨打3行,我尝试使用onDestroyonPauseonStop,但没有人适合我。

当用户触摸后退按钮并且任务转到后台时,会调用

onDestroy方法。 当用户触摸最近按钮时调用onPause方法,但应用程序未关闭。 onStop的{​​{1}}方法相同。

那么......如何知道用户关闭应用的时间?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以编写一种方法来检查应用是否在后台运行。

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方法中设置一个标志,该标志由所有其他活动扩展,以便您可以检查标志以了解应用程序是否正在运行。

答案 1 :(得分:0)

  

创建 BaseActivity 并覆盖其OnPause()方法并进行扩展   来自BaseActivity的每个活动。

我还想提一下,即使在多个活动之间切换,onPause()也会被触发,因此您需要跟踪它何时暂停以转到另一个屏幕。

参考:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

答案 2 :(得分:0)

如果您希望在用户退出活动时禁用蓝牙,请在onBackPressed()中将其停用。