feat: 第三轮深度完善 — SQLite/JSON/网络/媒体/文本 真实实现
SQLite真实数据库: - SQLiteDatabase: execSQL/insert/insertOrThrow/replace/update/delete/query 用sqlite3 - 修复getVersion/setVersion用PRAGMA user_version - 修复getMaximumSize/getPageSize/setMaximumSize/setPageSize用PRAGMA - SQLiteStatement: execute/simpleQueryForLong/simpleQueryForString/execQuery - SQLiteOpenHelper: onCreate/onUpgrade/onDowngrade回调正确触发 - 修复SQLiteCursor.moveToPosition越界处理 - 修复ContentValues值对提取bug JSON真实实现: - JSONObject: isNull/append/putOnce/putOpt/getNames - JSONArray: 完整put/get/opt/length/toString 网络真实实现: - NetworkInterface: getByName/getNetworkInterfaces/getHardwareAddress 用/sys/class/net+fcntl.ioctl - InterfaceAddress: 新增类 - ConnectivityManager: getActiveNetwork/getAllNetworks 用LinuxNetwork - WifiManager: getScanResults用nmcli, setWifiEnabled用nmcli/rfkill - BluetoothAdapter: getAddress/getName 用bluetoothctl 媒体真实实现: - MediaPlayer: prepare检查文件, getCurrentPosition实时计算, getDuration/getVideoWidth用ffprobe - MediaRecorder: setVideoSize/setVideoFrameRate/setVideoEncodingBitRate配置存储 - MediaMetadataRetriever: extractMetadata用ffprobe, getFrameAtTime用ffmpeg, getEmbeddedPicture用ffmpeg 文本真实实现: - TextUtils: split用re.split, concat/indexOf/lastIndexOf/urlEncode/urlDecode - SpannableString: setSpan/getSpans/getSpanFlags/nextSpanTransition 真实实现 - SpannableStringBuilder: 修复append重载bug Provider增强: - Settings: putBoolean/getBoolean - MediaStore: getContentUri/VOLUME常量 - ContactsContract: 补全常量和CommonDataKinds Util增强: - Log: w/e/wtf支持Throwable参数, 修复wtf重复定义bug - TypedValue: 修复complexToDimension/complexToFloat/getFloat实现 修复: - __init__.py: 补全NetworkInterface/InetAddress/MediaMetadataRetriever/SpannableStringBuilder导出 统计: 221模块, 3666类, 31005方法, 183529行
This commit is contained in:
1 parent
4235f8692c
commit
fbb8263b13
13 files changed
+1373
-146
No files matched your search
@@ -670,12 +670,73 @@ class WifiManager(Stub):
|
||||
return info
|
||||
|
||||
def getScanResults(self) -> List[ScanResult]:
|
||||
if _USE_LINUX:
|
||||
results = self._linux_scan_results()
|
||||
if results is not None:
|
||||
return results
|
||||
return list(self._scan_results)
|
||||
|
||||
def _linux_scan_results(self) -> Optional[List[ScanResult]]:
|
||||
"""通过 nmcli 获取 WiFi 扫描结果 (真实实现)"""
|
||||
import subprocess
|
||||
import re
|
||||
try:
|
||||
proc = subprocess.run(
|
||||
["nmcli", "-t", "-f", "ssid,bssid,signal,freq,security",
|
||||
"dev", "wifi", "list"],
|
||||
capture_output=True, text=True, timeout=15,
|
||||
)
|
||||
if proc.returncode != 0:
|
||||
return None
|
||||
results: List[ScanResult] = []
|
||||
seen: Set[str] = set()
|
||||
for line in proc.stdout.strip().split("\n"):
|
||||
if not line:
|
||||
continue
|
||||
# nmcli -t 模式中值内的 : 被转义为 \:, 按非转义 : 分割
|
||||
parts = re.split(r'(?<!\\):', line)
|
||||
parts = [p.replace('\\:', ':') for p in parts]
|
||||
if len(parts) < 5:
|
||||
continue
|
||||
ssid = parts[0]
|
||||
bssid = parts[1]
|
||||
if not bssid or bssid in seen:
|
||||
continue
|
||||
seen.add(bssid)
|
||||
sr = ScanResult()
|
||||
sr.SSID = ssid
|
||||
sr.BSSID = bssid
|
||||
try:
|
||||
sr.level = int(parts[2]) if parts[2] else 0
|
||||
except ValueError:
|
||||
sr.level = 0
|
||||
try:
|
||||
sr.frequency = int(float(parts[3])) if parts[3] else 0
|
||||
except ValueError:
|
||||
sr.frequency = 0
|
||||
sr.capabilities = parts[4] if len(parts) > 4 else ""
|
||||
results.append(sr)
|
||||
return results
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def startScan(self) -> bool:
|
||||
return True
|
||||
|
||||
def setWifiEnabled(self, enabled: bool) -> bool:
|
||||
if _USE_LINUX:
|
||||
import subprocess
|
||||
import shutil
|
||||
try:
|
||||
cmd = ["nmcli", "radio", "wifi", "on" if enabled else "off"]
|
||||
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=5)
|
||||
if proc.returncode != 0 and shutil.which("rfkill"):
|
||||
# 回退到 rfkill
|
||||
rfkill_cmd = (["rfkill", "unblock", "wifi"] if enabled
|
||||
else ["rfkill", "block", "wifi"])
|
||||
subprocess.run(rfkill_cmd, capture_output=True, timeout=5)
|
||||
except Exception:
|
||||
pass
|
||||
self._wifi_enabled = enabled
|
||||
self._wifi_state = self.WIFI_STATE_ENABLED if enabled else self.WIFI_STATE_DISABLED
|
||||
return True
|
||||
|
||||
Reference in new issue
Block a user