You do not indicate what library you are using. Is it this one (or similar)? https://github.com/jimmckeeth/FireMonkey-Android-Voice
Where you have "impossible to do something", you do not indicate exactly what it is your code is doing. Nor do you show what it is doing in the timer handler. Given that code executes, it's quite possible that the SpeechRecognition1Recognition event is executing outside of the main thread, which may account for the other issues you are seeing. If that is the case, you could use a construct like this:
procedure TForm1.SpeechRecognition1Recognition(Sender: TObject; Guess: string);
begin
TThread.Synchronize(nil,
procedure
begin
G_Heard := Guess;
// Execute your other code, here
end
);
end;