Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

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.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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

pascal
????????? Main.View.pas          # Single form ??? button ??? OpenHiddenSettings()
????????? Main.View.fmx          # FMX form layout
????????? README.md

OpenHiddenSettings 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:

delphi
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