Catalog · How the catalog works
SetPreferredNetwork
Directly opens Android's hidden RadioInfo engineering screen — the fastest way to change preferred network type on any ROM without root. Bypasses OEM/carrier UI restrictions that hide this control in standard settings.
- ★ 2 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
AndroidRadioInfo — Hidden Network Settings Launcher
Directly opens Android's hidden RadioInfo engineering screen — the fastest way to change preferred network type on any ROM without root. Bypasses OEM/carrier UI restrictions that hide this control in standard mobile network settings.
Why This Exists
On most Android devices the Preferred Network Type control (2G / 3G / LTE-only / 5G) is either:
- Hidden entirely from the standard Settings → Mobile Network page by the OEM
- Locked behind carrier restrictions that grey it out or remove it
- Moved to a different location on every OEM skin (OneUI, MIUI, ColorOS, EMUI…)
RadioInfo is an engineering screen built into Android itself that bypasses all of that. It talks directly to the RIL (Radio Interface Layer) and always exposes the raw network-type selector regardless of carrier branding or UI skin.
This project is a minimal Delphi FMX Android app that launches it in one tap.
Demo Test:
https://github.com/user-attachments/assets/ae2cf6cf-1a93-4026-8758-817b9117aeb7
How It Works
The launcher tries a prioritized chain of Activity intents, taking the first one that resolves on the current device:
| Priority | Target | Covers |
|---|---|---|
| 1 | com.android.settings / .RadioInfo |
Stock AOSP, Android 9–12 |
| 2 | com.android.settings / .network.telephony.NetworkSelectSettings |
Android 13+ AOSP |
| 3 | com.samsung.android.settings / .RadioInfo |
Samsung OneUI |
| 4 | com.android.phone / .MobileNetworkSettings |
Xiaomi MIUI / HyperOS |
| 5 | android.settings.NETWORK_OPERATOR_SETTINGS |
Generic fallback |
If none resolve, the user lands on the top-level wireless settings screen.
If RadioInfo Does Not Appear
Some Android 13+ GMS-certified builds removed RadioInfo from the launchable activity list. In that case the app falls back to the nearest available screen. Navigate manually:
- Stock Android → Mobile Network → Preferred network type → LTE/4G only
- Samsung → Connections → Mobile Networks → Network Mode → LTE/3G/2G
- Xiaomi → SIM & Mobile → Preferred network type → 4G
- Huawei → Mobile Network → Network Mode → 4G/3G/2G auto
Requirements
| Item | Value |
|---|---|
| IDE used | RAD Studio / Delphi 12 |
| Platform | Android (ARM32 / ARM64) |
| Min Android | API 21 (Android 5.0) |
| Permissions | None required |
| Root | Not required |
No special permissions are needed. The app only fires a standard startActivity intent — the same mechanism any launcher uses.
Project Structure
????????? Main.View.pas # Single form ??? button ??? OpenHiddenSettings()
????????? Main.View.fmx # FMX form layout
????????? README.mdOpenHiddenSettings and TryStartActivity are standalone functions in the implementation section — drop them into any existing FMX project with no dependencies.
Quick Integration
Copy these two functions into any Delphi FMX Android unit:
uses
Androidapi.Helpers,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes;
function TryStartActivity(const aPkgName, aClassName: string): Boolean;
var
LIntent: JIntent;
begin
Result := False;
try
LIntent := TJIntent.Create;
LIntent.setClassName(StringToJString(aPkgName), StringToJString(aClassName));
LIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
TAndroidHelper.Context.startActivity(LIntent);
Result := True;
except
Result := False;
end;
end;
function OpenHiddenSettings: Boolean;
var
LIntent: JIntent;
begin
if TryStartActivity('com.android.settings',
'com.android.settings.RadioInfo') then Exit(True);
if TryStartActivity('com.android.settings',
'com.android.settings.network.telephony.NetworkSelectSettings') then Exit(True);
if TryStartActivity('com.samsung.android.settings',
'com.samsung.android.settings.RadioInfo') then Exit(True);
if TryStartActivity('com.android.phone',
'com.android.phone.MobileNetworkSettings') then Exit(True);
try
LIntent := TJIntent.Create;
LIntent.setAction(StringToJString('android.settings.NETWORK_OPERATOR_SETTINGS'));
LIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
TAndroidHelper.Context.startActivity(LIntent);
Result := True;
except
Result := False;
end;
end;Then call OpenHiddenSettings from any button or event handler.
Background — Why Not Just Use MODIFY_PHONE_STATE?
android.permission.MODIFY_PHONE_STATE is protectionLevel="signature|privileged". Normal APKs cannot hold it — it is silently denied at install time on any non-rooted, non-system device. The only paths that bypass this without user interaction are root shell (service call phone) or being a pre-installed system app. This launcher is the correct no-root, no-permission alternative: it hands control to the user via the one screen Android always exposes.
License
MIT

