feat: Linux 真实实现层 — 从存根库变为可用生产力工具
新增 _linux_impl.py (800+行): - LinuxNetwork: 真实IP/接口/DNS/网关/MAC (ip命令+/proc/net) - LinuxBluetooth: 真实蓝牙状态/扫描/配对/连接 (bluetoothctl) - LinuxSensors: 真实温度/CPU频率/风扇 (/sys/class/hwmon) - LinuxAudio: 真实音量控制/静音 (amixer) - LinuxClipboard: 真实剪贴板读写 (xclip+tkinter回退) - LinuxPower: 真实CPU/内存/电池 (psutil+/sys/class/power_supply) - LinuxLocation: 真实IP地理定位 (ip-api.com) - LinuxNotify: 真实桌面通知 (notify-send) - LinuxDisplay: 真实屏幕尺寸/截屏/鼠标位置 (xdotool+X11) - LinuxUIAutomation: 真实点击/输入/按键/滚动 (xdotool) - LinuxCamera: 真实摄像头拍照 (opencv/V4L2) - LinuxProcess: 真实进程列表/系统信息/应用管理 (psutil+/proc) - LinuxShell: 真实命令执行 (subprocess) 改造10+核心类使用Linux真实实现: - BluetoothAdapter/SensorManager/AudioManager - ConnectivityManager/WifiManager/TelephonyManager - LocationManager/PowerManager/BatteryManager/Build - ActivityManager/Activity/Toast/Display/ClipboardManager - NotificationManager 15项真实行为测试全部通过: - 真实IP: 10.60.218.244 - 真实位置: 北京 39.9042, 116.407 - 真实主机名: work-41-vci-g427c - 真实内核: 5.15.120.byteatom-ck.14 - 真实内存: 1.8GB/3.8GB - 真实进程列表
This commit is contained in:
1 parent
8c3bd3c415
commit
690022cea3
17 files changed
+2083
-8
No files matched your search
@@ -14,6 +14,13 @@ from .._core import (
|
||||
_sdcard_root, _app_data_dir, _package_name,
|
||||
)
|
||||
|
||||
# Linux 真实实现导入
|
||||
try:
|
||||
from .._linux_impl import IS_LINUX, LinuxBluetooth, HAS_BLUETOOTHCTL
|
||||
_USE_LINUX = IS_LINUX
|
||||
except ImportError:
|
||||
_USE_LINUX = False
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# BluetoothProfile
|
||||
@@ -645,14 +652,20 @@ class BluetoothAdapter(Stub):
|
||||
return BluetoothAdapter._default_adapter
|
||||
|
||||
def isEnabled(self) -> bool:
|
||||
if _USE_LINUX:
|
||||
return LinuxBluetooth.get_state() == LinuxBluetooth.STATE_ON
|
||||
return self._enabled
|
||||
|
||||
def enable(self) -> bool:
|
||||
if _USE_LINUX:
|
||||
return LinuxBluetooth.enable()
|
||||
self._enabled = True
|
||||
self._state = self.STATE_ON
|
||||
return True
|
||||
|
||||
def disable(self) -> bool:
|
||||
if _USE_LINUX:
|
||||
return LinuxBluetooth.disable()
|
||||
self._enabled = False
|
||||
self._state = self.STATE_OFF
|
||||
return True
|
||||
@@ -668,13 +681,36 @@ class BluetoothAdapter(Stub):
|
||||
return True
|
||||
|
||||
def getBondedDevices(self) -> Set[BluetoothDevice]:
|
||||
if _USE_LINUX:
|
||||
devices = set()
|
||||
for d in LinuxBluetooth.get_bonded_devices():
|
||||
dev = BluetoothDevice(d.get("address", "00:00:00:00:00:00"))
|
||||
dev._name = d.get("name", "Unknown")
|
||||
dev._bond_state = BluetoothDevice.BOND_BONDED
|
||||
devices.add(dev)
|
||||
return devices
|
||||
return set(self._bonded_devices)
|
||||
|
||||
def getBondedDeviceAddresses(self) -> Set[str]:
|
||||
"""获取已配对设备地址集合"""
|
||||
if _USE_LINUX:
|
||||
return {d.get("address", "") for d in LinuxBluetooth.get_bonded_devices()}
|
||||
return {d.getAddress() for d in self._bonded_devices}
|
||||
|
||||
def startDiscovery(self) -> bool:
|
||||
if _USE_LINUX:
|
||||
try:
|
||||
LinuxBluetooth.scan(timeout=5)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
self._discovering = True
|
||||
return True
|
||||
|
||||
def cancelDiscovery(self) -> bool:
|
||||
if _USE_LINUX:
|
||||
# bluetoothctl scan off 在 LinuxBluetooth.scan 内部已处理
|
||||
return True
|
||||
self._discovering = False
|
||||
return True
|
||||
|
||||
@@ -694,6 +730,8 @@ class BluetoothAdapter(Stub):
|
||||
pass
|
||||
|
||||
def getState(self) -> int:
|
||||
if _USE_LINUX:
|
||||
return LinuxBluetooth.get_state()
|
||||
return self._state
|
||||
|
||||
def listenUsingRfcommWithServiceRecord(self, name: str, uuid_str: str) -> BluetoothServerSocket:
|
||||
@@ -704,6 +742,18 @@ class BluetoothAdapter(Stub):
|
||||
return BluetoothServerSocket()
|
||||
|
||||
def getRemoteDevice(self, address: str) -> Optional[BluetoothDevice]:
|
||||
if _USE_LINUX:
|
||||
# 从已配对设备中查找
|
||||
for d in LinuxBluetooth.get_bonded_devices():
|
||||
if d.get("address", "").upper() == address.upper():
|
||||
dev = BluetoothDevice(d.get("address", address))
|
||||
dev._name = d.get("name", "Unknown")
|
||||
dev._bond_state = BluetoothDevice.BOND_BONDED
|
||||
return dev
|
||||
# 未配对但地址合法则返回一个设备对象
|
||||
if BluetoothAdapter.checkBluetoothAddress(address):
|
||||
return BluetoothDevice(address)
|
||||
return None
|
||||
if not BluetoothAdapter.checkBluetoothAddress(address):
|
||||
return None
|
||||
return BluetoothDevice(address)
|
||||
|
||||
Reference in new issue
Block a user