One Tap Network Reset — research

A small Kotlin Android app with two jobs: (1) one tap resets a stuck mobile connection, the way airplane mode does, but without airplane mode or the mobile data switch; (2) a notification that says “SIM n: 5G Unlimited activated” when that SIM is on high-band 5G.

Code: github.com/R-Dilipkumar/one-tap-network-reset · Download APK

Short answer. A normal app is not allowed to restart the phone's cellular radio. The shell user (what ADB runs as) is. So the app uses Shizuku (shell rights, no root) or root to turn the cellular radio off and back on for each SIM. Wi‑Fi and Bluetooth stay on. With neither, it can only do a weak “soft refresh”.

1. Why airplane mode makes the internet fast again

Turning airplane mode on and off makes the modem fully leave the mobile network and join again. On the way back it:

The downside: airplane mode also turns off Wi‑Fi and Bluetooth (on most phones) and needs several taps. Restarting only the cellular radio gives the same effect without that.

2. What Android lets an app do

ActionNormal appShizuku (shell)Root
Toggle airplane modeNo (system only since Android 4.2)YesYes
Toggle mobile dataNo (needs MODIFY_PHONE_STATE since Android 5)YesYes
Cellular radio off/on per SIMNoYesYes
Change allowed network types (e.g. drop 5G for a moment)NoYes (Android 12+ API)Yes
Tell Android “this network is bad, re-check it”YesYesYes

Why Shizuku works: the shell user's manifest in Android's source grants MODIFY_PHONE_STATE, READ_PRIVILEGED_PHONE_STATE and WRITE_SECURE_SETTINGS. Shizuku runs a small server as that user and lets an approved app make system calls through it.

Things that look useful but are not

3. How the one-tap reset works

Three ways to tap: the app icon (no screen opens), the Quick Settings tile “Net Reset”, or the Reset network button on the 5G notification. Each tap runs:

  1. Shizuku running and allowed? → call ITelephony.setRadioForSubscriber(subId, false) for each SIM, wait 2.5 s, then …(subId, true).
  2. Otherwise root available? → run the same code as root: su -c "CLASSPATH=<app apk> app_process /system/bin …RootMain cycle <SIM ids>".
  3. If the radio call is refused → 5G nudge (Android 12+): remove 5G from the allowed network types for 3 s, then put back the exact old setting. The modem drops and re-adds 5G.
  4. Neither Shizuku nor root → soft refresh: ConnectivityManager.reportNetworkConnectivity(network, false), which makes Android re-check the network. Weak, but needs no rights. A message says so.

Afterwards the app waits (up to 20 s) for mobile data to reconnect and shows “Mobile network reset ✓”.

// Shared by the Shizuku and root paths (PrivOps.kt, simplified)
val telephony = ITelephony.Stub.asInterface(phoneBinder)   // by reflection
try {
  for (sub in sims) telephony.setRadioForSubscriber(sub, false)
  Thread.sleep(2500)
} finally {
  for (sub in sims) telephony.setRadioForSubscriber(sub, true)  // always back on
}

4. What runs on which Android version

AndroidReset with Shizuku / rootGetting Shizuku started5G status listener
10Radio off/onNeeds a PC (adb) once after each rebootPhoneStateListener
11Radio off/onWireless debugging on the phone itself, no PCPhoneStateListener
12 – 13Radio off/on, fallback 5G nudgeWireless debuggingTelephonyCallback
14 – 16+Same (radio power goes through Android's “user” reason internally)Wireless debuggingTelephonyCallback; notification uses foreground type specialUse

With root, Shizuku is not needed at all and nothing has to be started after a reboot.

5. The 5G Unlimited notification

Where *#*#4636#*#* gets its values

The “Phone info” screen reads two hidden methods of android.telephony.ServiceState:

4636 labelMethodValues
NR State (NSA)getNrState()0 NONE · 1 RESTRICTED · 2 NOT_RESTRICTED · 3 CONNECTED
NR FrequencygetNrFrequencyRange()0 UNKNOWN · 1 LOW (<1 GHz) · 2 MID (1–3 GHz) · 3 HIGH (3–6 GHz) · 4 MMWAVE (>6 GHz)

Rule used: NR State = CONNECTED and NR Frequency = HIGH → “SIM n: 5G Unlimited activated”. SIMs that don't match are left out of the notification.

How the app reads them

Limits

6. Setup

  1. Install the APK (adb install -r app-debug.apk) and tap the icon once. Allow Phone and Notifications. The 5G notification appears.
  2. Install Shizuku. In it, follow “Start via Wireless debugging” (Developer options → Wireless debugging → pair). Android 10 needs a PC instead.
  3. Tap the Net One Tap icon again and allow it in Shizuku's dialog.
  4. Optional: pull down Quick Settings → edit → add the “Net Reset” tile.
  5. After a phone restart, open Shizuku and tap Start again (not needed with root).

7. Safety and limits

8. Sources