2015-10-07 119 views
0

我的问题很简单,我试图在用户关闭应用程序时禁用我的应用程序的蓝牙。 我需要,如果用户在背景中的应用程序,蓝牙保持活动,但如果用户滑动应用程序在屏幕外,蓝牙关闭。如何知道何时关闭我的应用程序?

我知道如何禁用蓝牙。

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

完美的作品,但我需要调用3线当用户关闭该应用程序,我试着用onDestroy,,onStop,但没有人对我的作品。

onDestroy当用户触摸后退按钮并且任务转到后台时调用方法。 方法在用户触摸最近按钮时调用,但应用程序未关闭。 onStop方法相同的。

所以...如何知道用户何时关闭应用程序?

谢谢

回答

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

+0

该方法还会创建无意义的“处理程序”,并显示一个弹出窗口。您可以稍微清理它以匹配想要的/广告的功能。剩下的问题就是该方法对它本身没有帮助。因为它会从'onStop'等内部返回'false',因为该应用程序仍然处于前台。 – zapl

+0

该方法检查应用程序是否在后台。只有当它在后台运行时才返回true。这就是为什么我提到使用相应的返回值 – Jas

+0

但OP如何以及在哪里可以使用该方法?该方法不会告诉你在提到的活动生命周期方法里面,应用程序是否*之后会变成背景。 – zapl

0

如果您希望禁用蓝牙当用户退出你的活动,在onBackPressed()禁用它。

相关问题