2015-10-07 141 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()禁用它。

相關問題