HarmonyOS C++层无法监听折叠屏的展开收起状态变更?

需求场景:折叠屏手机展开和收起时,摄像头自动切换。目前摄像头选择和采集都在native c实现的,希望c层可以监听折叠屏的展开收起状态变更,便于在折叠屏展开和收起时自动切换摄像头。ArkTS层可以监听折叠屏的展开收起状态变更,但是C++层无法做到

阅读 539
1 个回答

目前C++层可以调用ts层接口。demo如下:

TS 对象:

// User.ts
export default class User {
  name: string = 'username'

  // 用于测试静态变量
  static message = "hello world"

  // 用于测试静态方法
  static staticMethod() {
    console.log('Static method called. message = ' + User.message);
  }


  location: object = {
    country: 'china',
    city: 'wuhan'
  }

  onCall() {
    console.log("testTag user onCall")
  }

}

function onCallGlobal() {
  console.log("testTag user onCall Global")
}
globalThis.onCallGlobal = onCallGlobal;

方法一:传入TS对象,在C++侧调用TS对象中的函数

static napi_value CallFunction(napi_env env, napi_callback_info info)
{
  // 获取实例对象
  size_t argc = 1;
  napi_value args = nullptr;
  napi_get_cb_info(env, info, &argc, &args, NULL, NULL);

  // 获取对象的方法
  napi_value onCall;
  napi_status status = napi_get_named_property(env, args, "onCall", &onCall);
  if (status != napi_ok)
    return onCall;
  napi_value return_val;

  // 调用对象中的函数
  status = napi_call_function(env, args, onCall, 0, NULL, &return_val);
  return onCall;
}

方法二:传入TS 类,在C++ 侧调用静态变量以及静态方法

// 传入JS 类,在C++侧调用类的静态变量和方法
static napi_value CallStaticFunction(napi_env env, napi_callback_info info)
{
  size_t argc = 1;
  napi_value js_cb;
  napi_get_cb_info(env, info, &argc, &js_cb, NULL, NULL);

  napi_value str;
  napi_create_string_utf8(env, "Kevin", 4, &str);
  napi_set_named_property(env, js_cb, "message", str);

  // 获取类的静态方法, staticMethod 定义在上面的User.ts 文件中
  napi_value staticMethod;
  napi_status status = napi_get_named_property(env, js_cb, "staticMethod", &staticMethod);
  if (status != napi_ok)
    return staticMethod;
  napi_call_function(env, js_cb, staticMethod, 0, nullptr, nullptr);

  return nullptr;
}

方法三:C++ 侧 使用全局对象,调用TS方法

static napi_value CallFunction_global(napi_env env, napi_callback_info info)
{
  // 获取全局对象
  napi_value global;
  napi_status status = napi_get_global(env, &global);

  // 获取onCallGlobal函数, onCallGlobal 函数定义在 上面的User.ts 文件中
  napi_value onCall;
  status = napi_get_named_property(env, global, "onCallGlobal", &onCall);
  if (status != napi_ok)
    return global;
  napi_value return_val;
  status = napi_call_function(env, global, onCall, 0, NULL, &return_val);
  return onCall;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进