GetCellularSignalTool
Returns current cellular signal strength. Requires ACCESS_NETWORK_STATE (checked up front). On API 29+ reads the first cellular entry from SignalStrength.cellSignalStrengths (added in Q — calling it on API 28 throws NoSuchMethodError); below that falls back to a reflection-based GSM read with a synthesized dBm estimate. Output: signal_asu, signal_dbm, level (excellent/good/moderate/poor/none), level_numeric (0-4). Returns ToolResult.error when permission is missing, no SignalStrength/cellular entry is available, or on failure.