index.uts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // 导入Android相关类
  2. import Intent from "android.content.Intent"; // Android意图类,用于启动活动
  3. import Uri from "android.net.Uri"; // Android URI类,用于解析URL
  4. import Activity from "android.app.Activity"; // Android活动基类
  5. import Context from "android.content.Context"; // Android上下文类
  6. /**
  7. * 打开网页URL函数
  8. *
  9. * @param url 要打开的网页地址,必须是有效的URL格式
  10. * @returns 返回操作结果,true表示成功,false表示失败
  11. *
  12. * 功能说明:
  13. * 1. 验证URL格式的合法性
  14. * 2. 创建Intent意图,指定ACTION_VIEW动作
  15. * 3. 获取当前Activity实例
  16. * 4. 启动系统默认浏览器打开链接
  17. * 5. 提供错误处理和异常捕获
  18. *
  19. * 注意事项:
  20. * - URL必须包含协议头(如http://或https://)
  21. * - 需要确保设备已安装浏览器应用
  22. * - 在某些情况下可能需要网络权限
  23. */
  24. export function openWeb(url: string): boolean {
  25. try {
  26. // 1. 参数验证:检查URL是否为空或无效
  27. if (url.trim() == "") {
  28. console.error("[cool-openurl] URL不能为空");
  29. return false;
  30. }
  31. // 2. URL格式验证:确保包含协议头
  32. let trimmedUrl = url.trim();
  33. if (!trimmedUrl.startsWith("http://") && !trimmedUrl.startsWith("https://")) {
  34. console.error("[cool-openurl] URL必须包含协议头(http://或https://)");
  35. return false;
  36. }
  37. // 3. 解析URL:将字符串转换为Uri对象
  38. let uri: Uri | null;
  39. try {
  40. uri = Uri.parse(trimmedUrl);
  41. } catch (e: any) {
  42. console.error("[cool-openurl] URL格式无效:" + trimmedUrl, e);
  43. return false;
  44. }
  45. // 4. 验证URI是否解析成功
  46. if (uri == null) {
  47. console.error("[cool-openurl] URI解析失败:" + trimmedUrl);
  48. return false;
  49. }
  50. // 5. 创建Intent意图
  51. // ACTION_VIEW表示查看指定数据的通用动作,系统会选择合适的应用来处理
  52. let intent = new Intent(Intent.ACTION_VIEW, uri);
  53. // 6. 设置Intent标志
  54. // FLAG_ACTIVITY_NEW_TASK:在新的任务栈中启动活动,确保浏览器在独立的任务中运行
  55. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  56. // 7. 获取当前Activity实例
  57. let activity = UTSAndroid.getUniActivity();
  58. if (activity == null) {
  59. console.error("[cool-openurl] 无法获取当前Activity实例");
  60. return false;
  61. }
  62. // 8. 类型安全:将获取的对象转换为Activity类型
  63. let currentActivity = activity as Activity;
  64. // 9. 验证系统中是否有能够处理该Intent的应用
  65. let packageManager = currentActivity.getPackageManager();
  66. let resolveInfos = packageManager.queryIntentActivities(intent, 0);
  67. if (resolveInfos.size == 0) {
  68. console.error("[cool-openurl] 系统中没有可以打开URL的应用");
  69. return false;
  70. }
  71. // 10. 启动Intent,打开URL
  72. currentActivity.startActivity(intent);
  73. // 11. 记录成功日志
  74. console.log("[cool-openurl] 成功打开URL:" + trimmedUrl);
  75. return true;
  76. } catch (error: any) {
  77. // 12. 异常处理:捕获并记录所有可能的异常
  78. console.error("[cool-openurl] 打开URL时发生异常:", error);
  79. return false;
  80. }
  81. }