首先,我知道一点关于重新启动应用程序,但那是当它是windows。在这种情况下,我需要使这是一个应用程序,从安卓。我找不到一个解决方案,在Delphi工作。我刚从@Mihai Limbășan找到这个,我引用:
也许你应该跳出思维定势。而不是摆弄互斥锁/实例逻辑,您可以简单地创建另一个可执行文件等待你的应用程序关闭,然后重新启动它。作为额外的奖励,您以后可以使用这种机制,例如,更新您的主应用程序的二进制文件。它也更容易运行,而不是高架在同一个应用程序中保持不同的完整性级别等
但不知道这是如何工作的,甚至从哪里开始…每一个技巧,代码样本,或其他可能的解决方案,重新启动一个应用程序将感激。
编辑
在一些问题之后是过程中的一些代码片段。
。例如,当你选择语言为"英语"并按下按钮保存此结果
Inifile := TIniFile.Create(fPath);
try
Inifile.WriteString('Instelling','ip',edit5.text);
Inifile.WriteString('Instelling','user',edit6.text);
Inifile.WriteString('Instelling','pixels',edit3.text);
Inifile.WriteInteger('Instelling','language',Combobox2.ItemIndex);
fGebruiker := Edit6.Text;
fFotoformaat := StrToInt(edit3.Text);
finally
FDConnection1.Params.Values['server']:=edit5.Text;
FDConnection1.Connected := True;
inifile.free;
End;
在这段代码中,我用数据填充了一个inifile文件,您还可以看到该语言的组合框的项索引。
在这一点上,我手动重新启动应用程序,以便通过以下代码选择正确的语言:
procedure TfmMain.FormShow(Sender: TObject);
VAR
param : string;
inifile : tInifile;
begin
if (System.SysUtils.fileexists(fPath)) then
Begin
begin
Inifile := TIniFile.Create(fPath);
try
if not (Inifile.ReadString('Instelling','ip','default')='default') and not (Inifile.ReadString('Instelling','Gebruiker','default')='default')then
try
edit5.text := Inifile.ReadString('Instelling','ip','default');
edit6.text := Inifile.ReadString('Instelling','user','default');
Edit3.text := Inifile.ReadString('Instelling','pixel','400');
combobox2.ItemIndex := IniFile.ReadInteger('Instelling','language',1);
fpixel:= StrToInt(edit3.Text);
fuser:=edit6.text;
FDConnection1.Params.Values['server']:=edit5.Text;
taal := 'NL';
//find language settings
if combobox2.ItemIndex=0 then
begin
language:= 'NL'
end;
if combobox2.ItemIndex=1 then
begin
language:= 'ENG';
end;
if language='ENG' then
begin
vertalerENG.vertaler('ENG');
end;
end;
end;
end;
end;
VertalerENG是一个函数,如果语言参数为ENG,则触发该函数,并将所有标题更改为英语。
问题是什么都没有改变,直到我重新启动应用程序。
如果你想重新启动应用程序,这段代码对我来说很好,你可以在重新启动应用程序之前设置时间间隔
uses
Androidapi.Helpers,Androidapi.JNI.GraphicsContentViewText,Androidapi.JNI.App,
System.DateUtils;
...
procedure RestartApp;
{$IFDEF ANDROID}
var LPM : JPackageManager;
LIntent_Start : JIntent;
LPendingIntent : JPendingIntent;
LMS : Int64;
{$ENDIF}
begin
{$IFDEF ANDROID}
LPM := TAndroidHelper.Context.getPackageManager();
LIntent_Start := LPM.getLaunchIntentForPackage(
TAndroidHelper.Context.getPackageName()
);
LIntent_Start.addFlags( TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP );
LPendingIntent := TJPendingIntent.JavaClass.getActivity(
TAndroidHelper.Context,
223344 {RequestCode},
LIntent_Start,
TJPendingIntent.JavaClass.FLAG_CANCEL_CURRENT
);
LMS := DateTimeToUnix( Now, False {InputIsUTC} ) * 1000;
TAndroidHelper.AlarmManager.&set(
TJAlarmManager.JavaClass.RTC,
LMS + 10000,
LPendingIntent
);
// TAndroidHelper.Activity.finish();
Application.Terminate;
{$ENDIF }
end;
如果更改语言是您唯一关心的问题,那么我建议更改应用程序的区域设置。你只需要重新启动活动,如果你使用所有的字符串正确从strings.xml
您可以在这里看到如何以编程方式更改应用程序的区域设置。
在Android中以编程方式更改应用语言