有時候,我們需要將自己的Android程序切換到后台運行,在必要時,將其切換到前台運行。下面提供了一種實現方式,首先需要引用三個單元:
1
|
uses Androidapi.JNI.App,Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers;
|
將應用程序切換到后台,這里提供了兩種方法,一種是將應用切換回桌面來實現,執行后相當於按下 Home 鍵:
1
2
3
4
5
6
7
8
9
10
|
procedure SendAppToBack(Sender: TObject);
var
intent:JIntent;
begin
intent:= 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 沒有提供默認函數,咱們模仿寫一個,這個函數在后面將程序切換到前台時一樣需要用到:
1
2
3
4
5
6
7
|
function SharedActivityManager: JActivityManager;
var
AService: JObject;
begin
AService := SharedActivityContext.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE);
Result := TJActivityManager.Wrap((AService as ILocalObject).GetObjectID);
end;
|
現在切換到后台,只需要一句代碼:
1
2
3
4
|
procedure SendAppToBack;
begin
SharedActivityManager.moveTaskToBack(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
end;
|
反過來,切換到前台也只需要一句代碼:
1
2
3
4
|
procedure BringAppToFront;
begin
SharedActivityManager.moveTaskToFront(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
end;
|
使用 moveTaskToBack/moveTaskToFront 需要注意,應用程序需要 reorder tasks 的授權(自己到項目設置里勾選上就OK了)。