我可以: 邀请好友来看>>
ZOL论坛 > 技术论坛 > Java技术论坛 > uni-app x 正式支持鸿蒙,又一个原生级全平台框架落地
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

uni-app x 正式支持鸿蒙,又一个原生级全平台框架落地

17浏览 / 0回复

z5zgbl

z5zgbl

0
精华
40
帖子

等  级:Lv.3
经  验:923
  • Z金豆: 216

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:
  • 注  册:2025-05-01
  • 登  录:2025-05-16
发表于 2025-05-14 19:22:50
电梯直达 确定
楼主

其实在很久之前的《浅谈 uts + uvue 下的 uni-app x 是什么》我们就聊过 uni-app x ,相信在此之前大家对于 uni-app 的印象应该都是在小程序居多,虽然 uni-app 也可以打包客户端 app,甚至有基于 weex 的 nvue 支持,但是其效果只能说是“一言难尽”,而这里要聊的 uni-app x ,其实就是 DCloud 在跨平台这两年的新尝试。

说起 uni-app x 其实已经被我遗忘很久了,虽然在去年的鸿蒙 Next 的发布会时 uni-app 有被提及,只是当时也没看到 uni-app x 的身影,而今天恰哈在朋友圈看到了 DCloud 开发分享的文章,才发现 uni-app x 已经完成了它全平台的最后一环:

从 uni-app x 自己的定位看,官方表示:uni-app x 的目标并非简单地改进跨平台框架的性能,而是为原生应用开发提供一种统一的、跨平台的编码范式 。

具体来说,就是 uni-app 不再是运行在 jscore 的跨平台框架,它是“基于 Web 技术栈开发,运行时编译为原生代码”的模式,相信这种模式大家应该也不陌生了,简单说就是:js(uts) 代码在打包时会直接编译成原生代码:

目标平台uts 编译后的原生语言AndroidKotliniOSSwift鸿蒙ArkTSWeb / 小程序j
甚至极端一点说,uni-app x 可以不需要单独写插件去调用平台 API,你可以直接在 uts 代码里引用平台原生 API ,因为你的代码本质上也是会被编译成原生代码,所以 uts ≈ native code ,只是使用时需要配置上对应的条件编译(如 APP-ANDROID、APP-IOS )支持:
js 体验AI代码助手 代码解读复制代码import Context from "android.content.Context";
import BatteryManager from "android.os.BatteryManager";

import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult, GetBatteryInfoSync } from '../interface.uts'
import IntentFilter from 'android.content.IntentFilter';
import Intent from 'android.content.Intent';

import { GetBatteryInfoFailImpl } from '../unierror';

/**
 * 获取电量
 */
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {
  const context = UTSAndroid.getAppContext();
  if (context != null) {
    const manager = context.getSystemService(
      Context.BATTERY_SERVICE
    ) as BatteryManager;
    const level = manager.getIntProperty(
      BatteryManager.BATTERY_PROPERTY_CAPACITY
    );

    let ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    let batteryStatus = context.registerReceiver(null, ifilter);
    let status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    let isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;

    const res : GetBatteryInfoSuccess = {
      errMsg: 'getBatteryInfo:ok',
      level,
      isCharging: isCharging
    }
    options.success?.(res)
    options.complete?.(res)
  } else {
    let res = new GetBatteryInfoFailImpl(1001);
    options.fail?.(res)
    options.complete?.(res)
  }
}


比如上方代码,通过 import BatteryManager from "android.os.BatteryManager" 可以直接导入使用 Android 的 BatteryManager 对象。

甚至你可以直接在 uts 里直接实现 OnClickListener 接口:
js 体验AI代码助手 代码解读复制代码import OnClickListener from 'android.view.View.OnClickListener';
// 实现 OnClickListener 接口
class User {
   name:string = "name"
}

class StartBroadcastListener extends User implements OnClickListener{

   override onClick(v?: View):void{

    let myReceiver = new ScreenReceiver();
    let filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    UTSAndroid.getUniActivity()!.registerReceiver(myReceiver, filter);

    // 提示屏幕状态监听已经注册
    Toast.makeText(UTSAndroid.getAppContext(),"屏幕状态监听已注册,注意观察控制台日志",Toast.LENGTH_LONG).show();

   }
}


// 使用
let btn_start_screen_listen = this.findViewById

高级模式
论坛精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL论坛您有任何使用问题和建议 您可以 联系论坛管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表