標籤:運行 tle xe7 send class 應用 int 項目 roi
有時候,我們需要將自己的Android程式切換到後台運行,在必要時,將其切換到前台運行。下面提供了一種實現方式,首先需要引用三個單元:
1 |
uses Androidapi.JNI.App,Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers; |
將應用程式切換到後台,這裡提供了兩種方法,一種是將應用程式切換回案頭來實現,執行後相當於按下 Home 鍵:
12345678910 |
procedure SendAppToBack(Sender: TObject);var intent:JIntent;beginintent:= TJIntent.Create;intent.setAction(TJIntent.JavaClass.ACTION_MAIN);intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(TJIntent.JavaClass.CATEGORY_HOME);SharedActivityContext.startActivity(intent);end; |
另一種辦法是調用 JActivityManager.moveTaskToBack 函數,這種相當於按下返回鍵,但程式沒有退出。我們先需要實現一個 ActivityManager 的服務執行個體,XE7 沒有提供預設函數,咱們模仿寫一個,這個函數在後面將程式切換到前台時一樣需要用到:
1234567 |
function SharedActivityManager: JActivityManager;var AService: JObject;beginAService := SharedActivityContext.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE);Result := TJActivityManager.Wrap((AService as ILocalObject).GetObjectID);end; |
現在切換到後台,只需要一句代碼:
1234 |
procedure SendAppToBack;beginSharedActivityManager.moveTaskToBack(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);end; |
反過來,切換到前台也只需要一句代碼:
Delphi/Pascal
1234 |
procedure BringAppToFront;beginSharedActivityManager.moveTaskToFront(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);end; |
使用 moveTaskToBack/moveTaskToFront 需要注意,應用程式需要 reorder tasks 的授權(自己到項目設定裡勾選上就OK了)。
[FMX]將 Android 程式切換到後台及從後台切換到前台實現