# -*- coding: utf-8 -*- """ 扩展 Android API 测试脚本 测试 android.os, android.content, android.app, android.widget, android.graphics 等模块 """ import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) def test_os_module(): """测试 android.os 模块""" print("\n" + "=" * 60) print("android.os 模块测试") print("=" * 60) from android_pyapi.android.os import ( Build, SystemClock, Environment, Process, Bundle, Handler, Looper, Message, BatteryManager, PowerManager, Vibrator, AsyncTask, CountDownTimer, Messenger, FileObserver, FileUtils, PatternMatcher, ) # Build 测试 print("\n[Build 设备信息]") print(f" MODEL: {Build.MODEL}") print(f" MANUFACTURER: {Build.MANUFACTURER}") print(f" BRAND: {Build.BRAND}") print(f" DEVICE: {Build.DEVICE}") print(f" FINGERPRINT: {Build.FINGERPRINT}") print(f" SDK_INT: {Build.VERSION.SDK_INT}") print(f" RELEASE: {Build.VERSION.RELEASE}") # SystemClock 测试 print("\n[SystemClock 系统时钟]") print(f" 启动时间: {SystemClock.elapsedRealtime()} ms") print(f" 运行时间: {SystemClock.uptimeMillis()} ms") # Environment 测试 print("\n[Environment 环境目录]") print(f" 外部存储: {Environment.getExternalStorageDirectory()}") print(f" 下载目录: {Environment.getExternalStoragePublicDirectory('Download')}") print(f" 数据目录: {Environment.getDataDirectory()}") print(f" 根目录: {Environment.getRootDirectory()}") # Process 测试 print("\n[Process 进程信息]") print(f" PID: {Process.myPid()}") print(f" TID: {Process.myTid()}") # Bundle 测试 print("\n[Bundle 数据容器]") bundle = Bundle() bundle.putString("name", "Android-pyApi") bundle.putInt("version", 100) bundle.putBoolean("windows", True) print(f" name: {bundle.getString('name')}") print(f" version: {bundle.getInt('version')}") print(f" windows: {bundle.getBoolean('windows')}") print(f" size: {bundle.size()}") # BatteryManager 测试 print("\n[BatteryManager 电池管理]") bm = BatteryManager() print(f" 电量: {bm.getLevel()}%") print(f" 充电: {bm.isCharging()}") print(f" 存在: {bm.isPresent()}") print(f" 技术: {bm.getTechnology()}") # PowerManager 测试 print("\n[PowerManager 电源管理]") pm = PowerManager() print(f" 交互: {pm.isInteractive()}") print(f" 屏幕: {pm.isScreenOn()}") # Vibrator 测试 print("\n[Vibrator 振动器]") vib = Vibrator() print(f" 有振动器: {vib.hasVibrator()}") # PatternMatcher 测试 print("\n[PatternMatcher 模式匹配]") pm_literal = PatternMatcher("/sdcard/test.txt", PatternMatcher.PATTERN_LITERAL) pm_prefix = PatternMatcher("/sdcard/", PatternMatcher.PATTERN_PREFIX) print(f" literal match: {pm_literal.match('/sdcard/test.txt')}") print(f" prefix match: {pm_prefix.match('/sdcard/test.txt')}") # FileUtils 测试 print("\n[FileUtils 文件工具]") test_file = os.path.join(os.environ.get('TEMP', '/tmp'), 'android_pyapi_test.txt') FileUtils.stringToFile(test_file, "Hello, Android-pyApi!") content = FileUtils.readFileToString(test_file) print(f" 写入读取: {content}") os.remove(test_file) def test_content_module(): """测试 android.content 模块""" print("\n" + "=" * 60) print("android.content 模块测试") print("=" * 60) from android_pyapi.android.content import ( Uri, ContentValues, ContentResolver, Context, SharedPreferences, IntentFilter, BroadcastReceiver, ComponentName, ClipData, ClipDescription, ContentProvider, ContentProviderClient, ClipboardManager, ) # Uri 测试 print("\n[Uri 统一资源标识符]") uri = Uri.parse("https://example.com/path?query=1&foo=bar#fragment") print(f" scheme: {uri.getScheme()}") print(f" host: {uri.getHost()}") print(f" path: {uri.getPath()}") print(f" query: {uri.getQuery()}") print(f" fragment: {uri.getFragment()}") print(f" toString: {uri.toString()}") # ContentValues 测试 print("\n[ContentValues 内容值]") cv = ContentValues() cv.put("title", "Test") cv.put("value", 42) cv.put("flag", True) print(f" title: {cv.getAsString('title')}") print(f" value: {cv.getAsInteger('value')}") print(f" flag: {cv.getAsBoolean('flag')}") print(f" size: {cv.size()}") # Context 测试 print("\n[Context 应用上下文]") ctx = Context() print(f" packageName: {ctx.getPackageName()}") print(f" filesDir: {ctx.getFilesDir()}") print(f" cacheDir: {ctx.getCacheDir()}") print(f" dataDir: {ctx.getDataDir()}") # SharedPreferences 测试 print("\n[SharedPreferences 持久化存储]") sp = ctx.getSharedPreferences("test_prefs") editor = sp.edit() editor.putString("username", "test_user") editor.putInt("login_count", 5) editor.putBoolean("remember", True) editor.commit() print(f" username: {sp.getString('username')}") print(f" login_count: {sp.getInt('login_count')}") print(f" remember: {sp.getBoolean('remember')}") # ComponentName 测试 print("\n[ComponentName 组件名]") cn = ComponentName("com.example.app", "com.example.app.MainActivity") print(f" package: {cn.getPackageName()}") print(f" class: {cn.getClassName()}") print(f" short: {cn.getShortClassName()}") print(f" flatten: {cn.flattenToString()}") # ClipData 测试 print("\n[ClipData 剪贴板数据]") clip = ClipData.newPlainText("label", "Hello, Clipboard!") item = clip.getItemAt(0) print(f" text: {item.getText()}") print(f" itemCount: {clip.getItemCount()}") # ClipboardManager 测试 print("\n[ClipboardManager 剪贴板管理]") cm = ClipboardManager() cm.setText("Test Clipboard") print(f" getText: {cm.getText()}") print(f" hasText: {cm.hasText()}") def test_app_module(): """测试 android.app 模块""" print("\n" + "=" * 60) print("android.app 模块测试") print("=" * 60) from android_pyapi.android.app import ( Intent, Activity, Service, Notification, NotificationManager, AlarmManager, ActivityManager, ) # Intent 测试 print("\n[Intent 意图]") intent = Intent(Intent.ACTION_VIEW) intent.setData("https://example.com") intent.putExtra("title", "Test") intent.putExtra("count", 42) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) print(f" action: {intent.getAction()}") print(f" data: {intent.getData()}") print(f" title: {intent.getStringExtra('title')}") print(f" count: {intent.getIntExtra('count')}") print(f" flags: {hex(intent.getFlags())}") # Notification 测试 print("\n[Notification 通知]") notif = Notification() notif.title = "Test Notification" notif.text = "This is a test" print(f" title: {notif.title}") print(f" text: {notif.text}") # NotificationManager 测试 print("\n[NotificationManager 通知管理]") nm = NotificationManager() print(f" 类型: {type(nm).__name__}") # AlarmManager 测试 print("\n[AlarmManager 闹钟管理]") am = AlarmManager() print(f" 类型: {type(am).__name__}") def test_widget_module(): """测试 android.widget 模块""" print("\n" + "=" * 60) print("android.widget 模块测试") print("=" * 60) try: from android_pyapi.android.widget import ( Toast, AlertDialog, Button, TextView, EditText, ListView, RecyclerView, ) # Toast 测试 print("\n[Toast 提示]") toast = Toast.makeText(None, "Hello, Toast!", Toast.LENGTH_SHORT) print(f" text: {toast._text}") print(f" duration: {toast._duration}") # AlertDialog 测试 print("\n[AlertDialog 对话框]") dialog = AlertDialog(None) print(f" 类型: {type(dialog).__name__}") except ImportError as e: print(f" widget 模块导入失败: {e}") def test_graphics_module(): """测试 android.graphics 模块""" print("\n" + "=" * 60) print("android.graphics 模块测试") print("=" * 60) try: from android_pyapi.android.graphics import ( Bitmap, Canvas, Paint, Color, Rect, RectF, Path, Matrix, ) # Color 测试 print("\n[Color 颜色]") print(f" RED: {hex(Color.RED)}") print(f" GREEN: {hex(Color.GREEN)}") print(f" BLUE: {hex(Color.BLUE)}") print(f" WHITE: {hex(Color.WHITE)}") print(f" BLACK: {hex(Color.BLACK)}") print(f" argb(255,128,64,32): {hex(Color.argb(255, 128, 64, 32))}") # Bitmap 测试 print("\n[Bitmap 位图]") bm = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888) print(f" width: {bm.getWidth()}") print(f" height: {bm.getHeight()}") print(f" config: {bm.getConfig()}") # Paint 测试 print("\n[Paint 画笔]") paint = Paint() paint.setColor(Color.RED) paint.setTextSize(24.0) print(f" color: {hex(paint.getColor())}") print(f" textSize: {paint.getTextSize()}") # Rect 测试 print("\n[Rect 矩形]") rect = Rect(10, 20, 100, 200) print(f" left: {rect.left}") print(f" top: {rect.top}") print(f" right: {rect.right}") print(f" bottom: {rect.bottom}") print(f" width: {rect.width()}") print(f" height: {rect.height()}") except ImportError as e: print(f" graphics 模块导入失败: {e}") def test_java_module(): """测试 java 模块""" print("\n" + "=" * 60) print("java 模块测试") print("=" * 60) from android_pyapi.java.lang import ( String, StringBuilder, Integer, Math, System, Thread, ) from android_pyapi.java.io import ( File, FileInputStream, FileOutputStream, ) from android_pyapi.java.util import ( ArrayList, HashMap, HashSet, ) from android_pyapi.org.json import JSONObject, JSONArray # String 测试 print("\n[String 字符串]") s = String("Hello, Android-pyApi!") print(f" length: {s.length()}") print(f" upper: {s.toUpperCase()}") print(f" contains('Android'): {s.contains('Android')}") print(f" substring(7): {s.substring(7)}") # StringBuilder 测试 print("\n[StringBuilder 字符串构建器]") sb = StringBuilder() sb.append("Hello") sb.append(", ") sb.append("World!") print(f" result: {sb.toString()}") print(f" length: {sb.length()}") # Integer 测试 print("\n[Integer 整数]") print(f" parseInt('42'): {Integer.parseInt('42')}") print(f" MAX_VALUE: {Integer.MAX_VALUE}") print(f" MIN_VALUE: {Integer.MIN_VALUE}") # Math 测试 print("\n[Math 数学]") print(f" PI: {Math.PI}") print(f" abs(-42): {Math.abs(-42)}") print(f" max(10, 20): {Math.max(10, 20)}") print(f" sqrt(144): {Math.sqrt(144)}") print(f" pow(2, 10): {Math.pow(2, 10)}") # ArrayList 测试 print("\n[ArrayList 列表]") lst = ArrayList() lst.add("Apple") lst.add("Banana") lst.add("Cherry") print(f" size: {lst.size()}") print(f" first: {lst.get(0)}") print(f" contains('Banana'): {lst.contains('Banana')}") # HashMap 测试 print("\n[HashMap 哈希表]") m = HashMap() m.put("name", "Android-pyApi") m.put("version", "1.0.0") print(f" name: {m.get('name')}") print(f" size: {m.size()}") print(f" containsKey('name'): {m.containsKey('name')}") # JSONObject 测试 print("\n[JSONObject JSON 对象]") json = JSONObject() json.put("platform", "Windows") json.put("python", True) json.put("version", 3.12) print(f" toString: {json.toString()}") print(f" platform: {json.getString('platform')}") # File 测试 print("\n[File 文件]") f = File(os.environ.get('TEMP', '/tmp'), "test_file.txt") print(f" path: {f.getAbsolutePath()}") print(f" name: {f.getName()}") print(f" parent: {f.getParent()}") def main(): """主测试函数""" print("=" * 60) print("Android-pyApi 扩展 API 测试") print("=" * 60) test_os_module() test_content_module() test_app_module() test_widget_module() test_graphics_module() test_java_module() print("\n" + "=" * 60) print("所有测试完成!") print("=" * 60) if __name__ == "__main__": main()