"How can I detect the Android emulator?" is a question a lot of people have asked.
The authoritative way is as below. On the Android emulator, there exists the property ro.kernel.qemu. On an actual Android device, this property doesn't exist.
public static boolean isRunningOnEmulator() { String emulatorProperty = SystemProperties.get("ro.kernel.qemu"); boolean Result = (emulatorProperty!=null) && (emulatorProperty.equals("1")); return Result; }
SystemProperties is a helper class I've created that uses Reflection to call into the public android.os.SystemProperties which is not exposed in the Android SDK.
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes