""" Android-pyApi — Android API 全面 Python 翻译 ============================================== 方法签名完全对齐 Android SDK,跨平台运行于 Windows/macOS/Linux。 用法: from android_pyapi import Intent, Context, Uri, Bitmap, View from android_pyapi.java.io import File, FileInputStream from android_pyapi.java.util import ArrayList, HashMap from android_pyapi.org.json import JSONObject, JSONArray 设计原则: 1. 方法名、参数名、返回类型完全对齐 Android SDK 2. 能桌面实现的 → 真实实现 (基于 PIL/sqlite3/socket 等) 3. 无法桌面实现的 → 返回合理默认值或抛出 AndroidOnlyError 4. 所有常量值与 Android SDK 一致 """ from ._core import ( AndroidOnlyError, Stub, android_context, get_context, _sdcard_root, _app_data_dir, _package_name, ) # android.* 包 from .android.app import * from .android.content import * from .android.content_pm import * from .android.os import * from .android.view import * from .android.view_accessibility import * from .android.view_animation import * from .android.view_inputmethod import * from .android.widget import * from .android.graphics import * from .android.graphics_drawable import * from .android.graphics_pdf import * from .android.net import * from .android.net_wifi import * from .android.media import * from .android.hardware import * from .android.hardware_camera2 import * from .android.hardware_biometrics import * from .android.location import * from .android.database import * from .android.database_sqlite import * from .android.provider import * from .android.telephony import * from .android.bluetooth import * from .android.bluetooth_le import * from .android.text import * from .android.util import * from .android.preference import * from .android.webkit import * from .android.nfc import * from .android.speech_tts import * from .android.inputmethod import * # java.* 包 from .java.io import * from .java.net import * from .java.util import * from .java.util_regex import * from .java.util_zip import * from .java.util_concurrent import * from .java.lang import * from .java.math import * from .java.text import * from .java.time import * from .java.nio import * from .java.nio_file import * from .java.security import * from .java.crypto import * # org.* 包 from .org.json import * # Base64 (标准 Android API) import base64 as _base64 class Base64: DEFAULT = 0 NO_PADDING = 1 NO_WRAP = 2 CRLF = 4 URL_SAFE = 8 NO_CLOSE = 16 @staticmethod def encodeToString(input_data, flags=0): if isinstance(input_data, str): input_data = input_data.encode('utf-8') return _base64.b64encode(input_data).decode('ascii') @staticmethod def decode(str_val, flags=0): return _base64.b64decode(str_val) @staticmethod def encode(input_data, flags=0): if isinstance(input_data, str): input_data = input_data.encode('utf-8') return _base64.b64encode(input_data) # Scanner (java.util) class Scanner: def __init__(self, source): if isinstance(source, str): self._source = source else: self._source = str(source) self._pos = 0 def next(self): while self._pos < len(self._source) and self._source[self._pos].isspace(): self._pos += 1 start = self._pos while self._pos < len(self._source) and not self._source[self._pos].isspace(): self._pos += 1 if start == self._pos: raise Exception("NoSuchElementException") return self._source[start:self._pos] def hasNext(self): pos = self._pos while pos < len(self._source) and self._source[pos].isspace(): pos += 1 return pos < len(self._source) def nextInt(self): return int(self.next()) def close(self): pass # Timer (java.util) class Timer: def __init__(self, name=None, daemon=False): import threading self._thread = None self._tasks = [] def schedule(self, task, delay=None, period=None): import threading if delay is None: self._run_once(task) elif period is None: self._run_delayed(task, delay) else: self._run_periodic(task, delay, period) def _run_once(self, task): t = threading.Thread(target=task.run) t.daemon = True self._tasks.append(t) t.start() def _run_delayed(self, task, delay_ms): import threading def _run(): import time time.sleep(delay_ms / 1000.0) task.run() t = threading.Thread(target=_run) t.daemon = True self._tasks.append(t) t.start() def _run_periodic(self, task, delay_ms, period_ms): import threading def _run(): import time time.sleep(delay_ms / 1000.0) while True: task.run() time.sleep(period_ms / 1000.0) t = threading.Thread(target=_run) t.daemon = True self._tasks.append(t) t.start() def cancel(self): pass def purge(self): return 0 class TimerTask: def __init__(self): self._cancelled = False def run(self): pass def cancel(self): self._cancelled = True def scheduledExecutionTime(self): return 0 __version__ = "1.0.0" __all__ = [ # android "Intent", "Context", "Uri", "ContentValues", "ContentResolver", "BroadcastReceiver", "IntentFilter", "SharedPreferences", "PackageManager", "PackageInfo", "ActivityManager", "Build", "Environment", "PowerManager", "BatteryManager", "Bundle", "Handler", "Looper", "Message", "View", "ViewGroup", "TextView", "EditText", "Button", "ImageView", "ScrollView", "ListView", "Spinner", "CheckBox", "Switch", "ProgressBar", "Toast", "Bitmap", "BitmapFactory", "Canvas", "Color", "Paint", "Rect", "RectF", "Matrix", "Typeface", "PdfRenderer", "Drawable", "BitmapDrawable", "ConnectivityManager", "NetworkInfo", "WifiManager", "MediaPlayer", "AudioManager", "MediaRecorder", "SensorManager", "CameraManager", "BiometricPrompt", "LocationManager", "Location", "Geocoder", "SQLiteDatabase", "SQLiteOpenHelper", "Cursor", "Settings", "MediaStore", "ContactsContract", "CalendarContract", "TelephonyManager", "SmsManager", "BluetoothAdapter", "BluetoothDevice", "TextUtils", "Html", "SpannableString", "Log", "Base64", "TypedValue", "AccessibilityNodeInfo", "AccessibilityService", "Animation", "AlphaAnimation", "TranslateAnimation", "InputMethodManager", "WebView", "TextToSpeech", # java "File", "FileInputStream", "FileOutputStream", "BufferedReader", "BufferedWriter", "InputStreamReader", "OutputStreamWriter", "URL", "HttpURLConnection", "Socket", "ServerSocket", "ArrayList", "HashMap", "HashSet", "LinkedList", "Collections", "Arrays", "Calendar", "Date", "Random", "UUID", "Scanner", "Timer", "TimerTask", "Pattern", "Matcher", "ZipFile", "GZIPInputStream", "GZIPOutputStream", "ExecutorService", "Executors", "Future", "Callable", "String", "StringBuilder", "StringBuffer", "Integer", "Math", "System", "Thread", "BigInteger", "BigDecimal", "SimpleDateFormat", "DecimalFormat", "LocalDateTime", "LocalDate", "LocalTime", "Instant", "Duration", "Period", "ChronoUnit", "ChronoField", "DayOfWeek", "Month", "ZoneId", "ZoneOffset", "DateTimeFormatter", "ByteBuffer", "Files", "Path", "Paths", "MessageDigest", "SecureRandom", "Cipher", "Mac", "KeyGenerator", # org "JSONObject", "JSONArray", "JSONException", ]