Files
Android-pyApi/android_pyapi/android/net_wifi_rtt.py
T
shuiyu1123 a51854455b feat: 大规模扩充至212个模块/175K行代码 — 覆盖android/java/javax/org/dalvik全包
- android/ 167个模块 (app/content/os/view/widget/graphics/media/hardware/net/telephony/provider等)
- java/ 35个模块 (lang/io/util/net/nio/security/crypto/sql/beans/rmi/awt等)
- javax/ 4个模块 (net/crypto/security/sql)
- org/ 5个模块 (json/w3c_dom/xml_sax/xml_pull/apache_http)
- dalvik/ 1个模块 (system)
- ~3053个类/接口,方法签名完全对齐Android SDK
- 桌面跨平台运行 (Windows/macOS/Linux)
- 修复所有导入错误和Python关键字冲突
2026-06-24 14:15:56 +00:00

319 lines
11 KiB
Python

"""
Android net.wifi.rtt 包 — RttManager, RangingRequest, RangingResult,
ResponderLocation, WifiRttManager
方法签名完全对齐 Android SDK
"""
from __future__ import annotations
import sys
from typing import Any, Dict, List, Optional, Tuple
from .._core import Stub, AndroidOnlyError
from ..java.lang import RuntimeException
IllegalArgumentException = type("IllegalArgumentException", (RuntimeException,), {})
__all__ = [
"RttManager",
"RangingResultCallback",
"RangingRequest",
"RangingResult",
"ResponderLocation",
"WifiRttManager",
]
# ═══════════════════════════════════════════════════════════════
# RangingResultCallback
# ═══════════════════════════════════════════════════════════════
class RangingResultCallback(Stub):
"""RangingResultCallback — 测距结果回调"""
def __init__(self):
super().__init__()
def onRangingResults(self, results: List["RangingResult"]) -> None:
"""测距结果回调"""
pass
def onRangingFailure(self, reason: int) -> None:
"""测距失败回调"""
pass
def onRangingAborted(self) -> None:
"""测距中止回调"""
pass
# ═══════════════════════════════════════════════════════════════
# RangingRequest
# ═══════════════════════════════════════════════════════════════
class RangingRequest(Stub):
"""RangingRequest — 测距请求"""
class Builder(Stub):
"""Builder — 测距请求构建器"""
def __init__(self):
super().__init__()
self._access_points: List[Any] = []
self._channel_width = 0
self._preamble = 0
def addAccessPoint(self, access_point: Any) -> "RangingRequest.Builder":
"""添加接入点"""
self._access_points.append(access_point)
return self
def addAccessPoints(self, access_points: List[Any]) -> "RangingRequest.Builder":
"""添加多个接入点"""
self._access_points.extend(access_points)
return self
def setChannelWidth(self, channel_width: int) -> "RangingRequest.Builder":
"""设置信道宽度"""
self._channel_width = channel_width
return self
def setPreamble(self, preamble: int) -> "RangingRequest.Builder":
"""设置前导码"""
self._preamble = preamble
return self
def build(self) -> "RangingRequest":
"""构建测距请求"""
req = RangingRequest()
req._access_points = self._access_points.copy()
req._channel_width = self._channel_width
req._preamble = self._preamble
return req
def __init__(self):
super().__init__()
self._access_points: List[Any] = []
self._channel_width = 0
self._preamble = 0
# ═══════════════════════════════════════════════════════════════
# RangingResult
# ═══════════════════════════════════════════════════════════════
class RangingResult(Stub):
"""RangingResult — 测距结果"""
STATUS_SUCCESS = 0
STATUS_FAIL = 1
STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC = 2
def __init__(self, mac_address: str = "00:00:00:00:00:00", status: int = STATUS_SUCCESS,
rssi: int = 0, distance_mm: int = 0, distance_std_dev_mm: int = 0,
timestamp: int = 0, num_attempted: int = 0, num_successful: int = 0,
is_80211mc: bool = False):
super().__init__()
self._mac_address = mac_address
self._status = status
self._rssi = rssi
self._distance_mm = distance_mm
self._distance_std_dev_mm = distance_std_dev_mm
self._timestamp = timestamp
self._num_attempted = num_attempted
self._num_successful = num_successful
self._is_80211mc = is_80211mc
self._responder_location: Optional["ResponderLocation"] = None
self._unconfirmed_location: Optional["ResponderLocation"] = None
self._location_timestamp = 0
def getMacAddress(self) -> str:
"""获取 MAC 地址"""
return self._mac_address
def getStatus(self) -> int:
"""获取状态"""
return self._status
def getRssi(self) -> int:
"""获取 RSSI"""
return self._rssi
def getDistanceMm(self) -> int:
"""获取距离(毫米)"""
return self._distance_mm
def getDistanceStdDevMm(self) -> int:
"""获取距离标准差(毫米)"""
return self._distance_std_dev_mm
def getTimestamp(self) -> int:
"""获取时间戳"""
return self._timestamp
def getNumAttemptedMeasurements(self) -> int:
"""获取尝试测量次数"""
return self._num_attempted
def getNumSuccessfulMeasurements(self) -> int:
"""获取成功测量次数"""
return self._num_successful
def is80211mcMeasurement(self) -> bool:
"""检查是否为 802.11mc 测量"""
return self._is_80211mc
def getResponderLocation(self) -> Optional["ResponderLocation"]:
"""获取响应者位置"""
return self._responder_location
def getUnconfirmedLocation(self) -> Optional["ResponderLocation"]:
"""获取未确认的位置"""
return self._unconfirmed_location
def getLocationTimestamp(self) -> int:
"""获取位置时间戳"""
return self._location_timestamp
# ═══════════════════════════════════════════════════════════════
# ResponderLocation
# ═══════════════════════════════════════════════════════════════
class ResponderLocation(Stub):
"""ResponderLocation — 响应者位置"""
def __init__(self):
super().__init__()
self._lci = False
self._lcr = False
self._latitude = 0.0
self._longitude = 0.0
self._altitude = 0.0
self._floor_number = 0
self._height_above_floor = 0.0
self._height_floor = 0.0
self._expected_to_move = False
self._location_accuracy_micros = 0
self._altitude_accuracy = 0.0
def isLci(self) -> bool:
"""检查是否为 LCI"""
return self._lci
def isLcr(self) -> bool:
"""检查是否为 LCR"""
return self._lcr
def getLatitude(self) -> float:
"""获取纬度"""
return self._latitude
def getLongitude(self) -> float:
"""获取经度"""
return self._longitude
def getAltitude(self) -> float:
"""获取海拔"""
return self._altitude
def getFloorNumber(self) -> int:
"""获取楼层号"""
return self._floor_number
def getHeightAboveFloorMeters(self) -> float:
"""获取距离本层地面高度(米)"""
return self._height_above_floor
def getHeightFloorMeters(self) -> float:
"""获取本层高度(米)"""
return self._height_floor
def getExpectedToMove(self) -> bool:
"""检查是否预期移动"""
return self._expected_to_move
def getLocationAccuracyMicros(self) -> int:
"""获取位置精度(微秒)"""
return self._location_accuracy_micros
def getAltitudeAccuracy(self) -> float:
"""获取海拔精度"""
return self._altitude_accuracy
def toString(self) -> str:
return f"ResponderLocation(lat={self._latitude}, lon={self._longitude})"
# ═══════════════════════════════════════════════════════════════
# RttManager (original/deprecated)
# ═══════════════════════════════════════════════════════════════
class RttManager(Stub):
"""RttManager — RTT 管理器(已废弃)(桌面存根)"""
def __init__(self):
super().__init__()
self._callbacks: Dict[int, RangingResultCallback] = {}
def startRanging(self, request: RangingRequest, callback: RangingResultCallback) -> None:
"""开始测距"""
pass
def stopRanging(self, request: RangingRequest) -> None:
"""停止测距"""
pass
def registerCallback(self, callback: RangingResultCallback) -> None:
"""注册回调"""
callback_id = id(callback)
self._callbacks[callback_id] = callback
def unregisterCallback(self, callback: RangingResultCallback) -> None:
"""注销回调"""
callback_id = id(callback)
self._callbacks.pop(callback_id, None)
# ═══════════════════════════════════════════════════════════════
# WifiRttManager (newer replacement API)
# ═══════════════════════════════════════════════════════════════
class WifiRttManager(Stub):
"""WifiRttManager — Wi-Fi RTT 管理器 (桌面存根)"""
def __init__(self, context: Any = None):
super().__init__()
self._context = context
self._available = False
self._results: List[RangingResult] = []
def startRanging(self, request: RangingRequest, executor: Any,
callback: RangingResultCallback) -> None:
"""开始测距"""
pass
def cancelRanging(self, request: RangingRequest) -> None:
"""取消测距"""
pass
def registerRangingResultCallback(self, executor: Any,
callback: RangingResultCallback) -> None:
"""注册测距结果回调"""
pass
def unregisterRangingResultCallback(self, callback: RangingResultCallback) -> None:
"""注销测距结果回调"""
pass
def isAvailable(self) -> bool:
"""检查 RTT 是否可用"""
return self._available
def setRangingResultCallback(self, callback: RangingResultCallback) -> None:
"""设置测距结果回调"""
pass
def getRangingResults(self) -> List[RangingResult]:
"""获取测距结果"""
return self._results.copy()