优惠码 第116页

场景介绍 当设备需要设置不同的闪烁效果时,可以调用 Light 模块,例如,LED 灯能够设置灯颜色、灯亮和灯灭时长的闪烁效果。 说明 使用该功能依赖于硬件设备是否具有 LED 灯。 接口说明 灯模块主要提供的功能有:查询设备上灯的列表,查询某个灯设备支持的效果,打开和关闭灯设备。LightAgent 类开放能力如下,具体请查阅 API 参考文档。 接口名 描述 getLightIdList() 获取硬件设备上的灯列表。 isSupport(int) 根据指定灯Id查询硬件设备是否有该灯。 isEffectSupport(int, String) 查询指定的灯是否支持指定的闪烁效果。 turnOn(int, String) 对指定的灯创建指定效果的一次性闪烁。 turnOn(int, LightEffect) 对指定的灯创建自定义效果的一次性闪烁。 turnOn(String) 对指定的灯创建指定效果的一次性闪烁。 turnOn(LightEffect) 对指定的灯创建自定义效果的一次性闪烁。 turnOff(int) 关闭指定的灯。 turnOff() 关闭指定的灯。 开发步骤 查询硬件设备上灯的列表。 查询指定的灯是否支持指定的闪烁效果。 创建不同的闪烁效果。 关闭指定的灯。 private LightAgent lightAgent = new LightAgent(); @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_light_layout); // ... // 查询硬件设备上的灯列表 List<Integer> myLightList = lightAgent.getLightIdList(); if (myLightList.isEmpty()) { return; } int lightId = myLightList.get(0); // 查询指定的灯是否支持指定的闪烁效果 boolean isSupport = lightAgent.isEffectSupport(lightId, LightEffect.LIGHT_ID_KEYBOARD); // 创建指定效果的一次性闪烁 boolean turnOnResult = lightAgent.turnOn(lightId, LightEffect.LIGHT_ID_KEYBOARD); // 创建自定义效果的一次性闪烁 LightBrightness lightBrightness = new LightBrightness(255, 255, 255); LightEffect lightEffect = new LightEffect(lightBrightness, 1000, 1000); boolean turnOnEffectResult = lightAgent.turnOn(lightId, lightEffect); // 关闭指定的灯 boolean turnOffResult = lightAgent.turnOff(lightId); }

基本概念 控制类小器件指的是设备上的 LED灯和振动器。其中, LED灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。 运作机制 控制类小器件主要包含以下四个模块:控制类小器件 API、控制类小器件 Framework、控制类小器件 Service、HD_IDL 层。 图1 控制类小器件 控制类小器件 API:提供灯和振动器基础的 API,主要包含灯的列表查询、打开灯、关闭灯等接口,振动器的列表查询、振动器的振动器效果查询、触发/关闭振动器等接口。 控制类小器件 Framework:主要实现灯和振动器的框架层管理,实现与控制类小器件 Service 的通信。 控制类小器件 Service:实现灯和振动器的服务管理。 HD_IDL层:对不同设备(车机、智能穿戴、智慧屏等)的适配。 约束与限制 在调用 Light API 时,请先通过 getLightIdList 接口查询设备所支持的灯的 ID 列表,以免调用打开接口异常。 在调用 Vibrator API 时,请先通过 getVibratorIdList 接口查询设备所支持的振动器的ID列表,以免调用振动接口异常。 在使用振动器时,开发者需要配置请求振动器的权限ohos.permission.VIBRATE,才能控制振动器振动。

场景介绍 通过方向传感器数据,可以感知用户设备当前的朝向,从而达到为用户指明方位的目的。 通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。 通过接近光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。 通过气压计传感器数据,可以准确的判断设备当前所处的海拔。 通过环境光传感器数据,设备能够实现背光自动调节。 接口说明 HarmonyOS 传感器提供的功能有:查询传感器的列表、订阅/取消订阅传感器数据、查询传感器的最小采样时间间隔、执行控制命令。 以订阅方向类别的传感器数据为例,本节示例涉及的接口如下: 接口名 描述 getAllSensors() 获取属于方向类别的传感器列表。 getAllSensors(int) 获取属于方向类别中特定类型的传感器列表。 getSingleSensor(int) 查询方向类别中特定类型的默认sensor(如果存在多个则返回第一个)。 setSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation, long) 以设定的采样间隔订阅给定传感器的数据。 setSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation, long, long) 以设定的采样间隔和时延订阅给定传感器的数据。 releaseSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation) 取消订阅指定传感器的数据。 releaseSensorDataCallback(ICategoryOrientationDataCallback) 取消订阅的所有传感器数据。 接口名 描述 getSensorMinSampleInterval(int) 查询给定传感器的最小采样间隔。 runCommand(int, int, int) 针对某个传感器执行命令,刷新传感器的数据。 开发步骤 权限配置 如果设备上使用了[表2]中的传感器,需要请求相应的权限,开发者才能获取到传感器数据。 敏感级别 传感器 HarmonyOS权限名 权限描述 system_grant 加速度传感器、加速度未校准传感器、线性加速度传感器 ohos.permission.ACCELEROMETER 允许订阅Motion组对应的加速度传感器的数据。 user_grant 计步器 ohos.permission.ACTIVITY_MOTION 允许订阅运动状态。 开发者需要在 config.json 里面配置权限: 开发者如果需要获取加速度的数据,需要进行如下权限配置。 "reqPermissions": [ { "name": "ohos.permission.ACCELEROMETER", "reason": "", "usedScene": { "ability": [ ".MainAbility" ], "when": "inuse" } } ] 对于需要用户授权的权限,如计步器传感器,需要进行如下权限配置。 "reqPermissions": [ { "name": "ohos.permission.ACTIVITY_MOTION", "reason": "", "usedScene": { "ability": [ ".MainAbility" ], "when": "inuse" } } ] 由于敏感权限需要用户授权,因此,开发者在应用启动时或者调用订阅数据接口前,需要调用权限检查和请求权限接口。 @Override public void onStart(Intent intent) { super.onStart(intent); if (verifySelfPermission("ohos.permission.ACTIVITY_MOTION") != 0) { if (canRequestPermission("ohos.permission.ACTIVITY_MOTION")) { requestPermissionsFromUser(new String[] {"ohos.permission.ACTIVITY_MOTION"}, 1); } } // ... } @Override public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions,...

基本概念 HarmonyOS 传感器是应用访问底层硬件传感器的一种设备抽象概念。开发者根据传感器提供的 Sensor API,可以查询设备上的传感器,订阅传感器的数据,并根据传感器数据定制相应的算法,开发各类应用,比如指南针、运动健康、游戏等。 根据传感器的用途,可以将传感器分为六大类:运动类传感器、环境类传感器、方向类传感器、光线类传感器、健康类传感器、其他类传感器(如霍尔传感器),每一大类传感器包含不同类型的传感器,某种类型的传感器可能是单一的物理传感器,也可能是由多个物理传感器复合而成。传感器列表如[图1]所示。 分类 API类名 传感器类型 中文描述 说明 主要用途 运动类 ohos.sensor.agent.CategoryMotionAgent SENSOR_TYPE_ACCELEROMETER 加速度传感器 测量三个物理轴(x、y 和 z)上,施加在设备上的加速度(包括重力加速度),单位 : m/s2 检测运动状态 SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED 未校准加速度传感器 测量三个物理轴(x、y 和 z)上,施加在设备上的未校准的加速度(包括重力加速度),单位 : m/s2 检测加速度偏差估值 SENSOR_TYPE_LINEAR_ACCELERATION 线性加速度传感器 测量三个物理轴(x、y 和 z)上,施加在设备上的线性加速度(不包括重力加速度),单位 : m/s2 检测每个单轴方向上的线性加速度 SENSOR_TYPE_GRAVITY 重力传感器 测量三个物理轴(x、y 和 z)上,施加在设备上的重力加速度,单位 : m/s2 测量重力大小 SENSOR_TYPE_GYROSCOPE 陀螺仪传感器 测量三个物理轴(x、y 和 z)上,设备的旋转角速度,单位 : rad/s 测量旋转的角速度 SENSOR_TYPE_GYROSCOPE_UNCALIBRATED 未校准陀螺仪传感器 测量三个物理轴(x、y 和 z)上,设备的未校准旋转角速度,单位 : rad/s 测量旋转的角速度及偏差估值 SENSOR_TYPE_SIGNIFICANT_MOTION 大幅度动作传感器 测量三个物理轴(x、y 和 z)上,设备是否存在大幅度运动;如果取值为1则代表存在大幅度运动,取值为0则代表没有大幅度运动 用于检测设备是否存在大幅度运动 SENSOR_TYPE_DROP_DETECTION 跌落检测传感器 检测设备的跌落状态;如果取值为1则代表发生跌落,取值为0则代表没有发生跌落 用于检测设备是否发生了跌落 SENSOR_TYPE_PEDOMETER_DETECTION 计步器检测传感器 检测用户的计步动作;如果取值为1则代表用户产生了计步行走的动作;取值为0则代表用户没有发生运动 用于检测用户是否有计步的动作 SENSOR_TYPE_PEDOMETER 计步器传感器 统计用户的行走步数 用于提供用户行走的步数数据 环境类 ohos.sensor.agent.CategoryEnvironmentAgent SENSOR_TYPE_AMBIENT_TEMPERATURE 环境温度传感器 测量环境温度,单位 : 摄氏度 (°C) 测量环境温度 SENSOR_TYPE_MAGNETIC_FIELD 磁场传感器 测量三个物理轴向(x、y、z)上,环境地磁场,单位 : μT 创建指南针 SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED 未校准磁场传感器 测量三个物理轴向(x、y、z)上,未校准环境地磁场,单位 : μT 测量地磁偏差估值 SENSOR_TYPE_HUMIDITY 湿度传感器 测量环境的相对湿度,以百分比 (%) 表示 监测露点、绝对湿度和相对湿度 SENSOR_TYPE_BAROMETER 气压计传感器 测量环境气压,单位 : hPa 或 mbar 测量环境气压 SENSOR_TYPE_SAR 比吸收率传感器 测量比吸收率,单位:W/kg 测量设备的电磁波能量吸收比值。 方向类 ohos.sensor.agent.CategoryOrientationAgent SENSOR_TYPE_6DOF 6自由度传感器 测量上下、前后、左右方向上的位移,单位:m或mm;测量俯仰、偏摆、翻滚的角度,单位:rad 检测设备的三个平移自由度以及旋转自由度,用于目标定位追踪,如:VR SENSOR_TYPE_SCREEN_ROTATION 屏幕旋转传感器 检测设备屏幕的旋转状态 用于检测设备屏幕是否发生了旋转 SENSOR_TYPE_DEVICE_ORIENTATION 设备方向传感器 测量设备的旋转方向,单位:rad 用于检测设备旋转方向的角度值 SENSOR_TYPE_ORIENTATION 方向传感器 测量设备围绕所有三个物理轴(x、y、z)旋转的角度值,单位:rad 用于提供屏幕旋转的3个角度值 SENSOR_TYPE_ROTATION_VECTOR 旋转矢量传感器 测量设备旋转矢量,复合传感器:由加速度传感器、磁场传感器、陀螺仪传感器合成 检测设备相对于东北天坐标系的方向 SENSOR_TYPE_GAME_ROTATION_VECTOR 游戏旋转矢量传感器 测量设备游戏旋转矢量,复合传感器:由加速度传感器、陀螺仪传感器合成 应用于游戏场景 SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 地磁旋转矢量传感器 测量设备地磁旋转矢量,复合传感器:由加速度传感器、磁场传感器合成 用于测量地磁旋转矢量 光线类 ohos.sensor.agent.CategoryLightAgent SENSOR_TYPE_PROXIMITY 接近光传感器 测量可见物体相对于设备显示屏的接近或远离状态 通话中设备相对人的位置 SENSOR_TYPE_TOF ToF传感器 测量光在介质中行进一段距离所需的时间 人脸识别...

场景介绍 应用可以通过观察蜂窝网络状态变化,来接收最新蜂窝网络服务状态信息、信号信息等。 接口说明 RadioStateObserver 类中提供了观察蜂窝网络状态变化的方法,为了能够实时观察蜂窝网络状态变化,应用必须包含以下权限。 观察状态名称 权限名称 网络状态信息(NETWORK_STATE) ohos.permission.GET_NETWORK_INFO 信号信息(SIGNAL_INFO) NA 需要使用 RadioInfoManager 的如下接口将继承 RadioStateObserver 类的对象注册到系统服务: 接口名 观察事件的掩码 描述 addObserver OBSERVE_MASK_NETWORK_STATE 观察蜂窝网络驻网状态信息。 OBSERVE_MASK_SIGNAL_INFO 观察蜂窝网络信号信息。 removeObserver N/A 停止观察所有状态的变化。 开发步骤 添加观察事件 调用 RadioInfoManager 的 getInstance 接口,获取到 RadioInfoManager 实例。 创建继承 RadioStateObserver 的类 MyRadioStateObserver,并覆写状态变化回调方法。 创建 MyRadioStateObserver 的对象 observer。 调用 RadioInfoManager 的 addObserver 方法,传入已创建的 MyRadioStateObserver 对象 observer 和需要观察的 mask。 // 获取RadioInfoManager对象。 RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context); // 创建继承RadioStateObserver的类MyRadioStateObserver class MyRadioStateObserver extends RadioStateObserver { // 构造方法,在当前线程的runner中执行回调,slotId需要传入要观察的卡槽ID(0或1)。 MyRadioStateObserver(int slotId) { super(slotId); } // 构造方法,在执行runner中执行回调。 MyRadioStateObserver(int slotId, EventRunner runner) { super(slotId, runner); } // 网络注册状态变化的回调方法。 @Override public void onNetworkStateUpdated(NetworkState state) { ... } // 信号信息变化的回调方法。 @Override public void onSignalInfoUpdated(List<SignalInformation> signalInfos) { ... } } // 执行回调的runner。 EventRunner runner = EventRunner.create(); // 创建MyRadioStateObserver的对象。 MyRadioStateObserver observer = new MyRadioStateObserver(slotId, runner); //...

场景介绍 应用通常需要获取用户所在蜂窝网络下信号信息,以便获取当前驻网质量。开发者可以通过本业务,获取到用户指定 SIM 卡当前所在网络下的信号信息。 接口说明 RadioInfoManager 类中提供了获取当前网络信号信息列表的方法。 功能分类 接口名 描述 所需权限 获取管理对象 getInstance(Context context) 获取网络管理对象。 无 信号强度信息 getSignalInfoList(int slotId) 获取当前注册蜂窝网络信号强度信息。 无 开发步骤 调用 RadioInfoManager 的 getInstance 接口,获取到 RadioInfoManager 实例。 调用 getSignalInfoList(slotId) 方法,返回所有 SignalInformation 列表。 遍历 SignalInformation 列表,并分别根据 signalNetworkType 转换为对应制式的 SignalInformation 子类对象。 调用子类中的方法,获取信号强度信息。 // 获取RadioInfoManager对象。 RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context); // 获取信号信息。 List<SignalInformation> signalList = radioInfoManager.getSignalInfoList(slotId); // 检查信号信息列表大小。 if (signalList.size() == 0) { return; } // 依次遍历list获取当前驻网networkType对应的信号信息。 LteSignalInformation lteSignal; for (SignalInformation signal : signalList) { int signalNetworkType = signal.getSignalNetworkType(); if (signalNetworkType == TelephonyConstants.NETWORK_TYPE_LTE) { lteSignal = (LteSignalInformation) signal; } } // 调用子类中相应方法,获取对应制式的信号强度信息。 int signalLevel = lteSignal.getSignalLevel();

场景介绍 应用需要发送一条短信给一个指定的号码时,使用本业务。发送信息需要经过短信中心,短信中心号码可以是运营商默认的,也可以由应用自己指定。 如果设备支持同时插入 2 张 SIM 卡,且 2 张 SIM 卡均在位时,短信会从默认 SIM 卡发出。应用可通过调用 getDefaultSmsSlotId 来获取当前发短信的默认 SIM 卡位置。目前 API 暂不支持短信发送结果通知和送达报告。 接口说明 ShortMessageManager 为开发者提供短信管理功能,具体功能分类如下表。 功能分类 接口名 描述 所需权限 能力获取 hasSmsCapability() 检查当前设备是否支持短信收发。 无 获取管理对象 getInstance(Context context) 获取短信管理对象。 无 获取默认短信卡 getDefaultSmsSlotId() 获取默认短信卡对应卡槽ID。 无 长短信转化 splitMessage(String content) 将超过140个字节的长短信(如中文70个字符,英文160个字符)拆分成多条短信。 ohos.permission.SEND_MESSAGES 发送短信 sendMessage(String destinationHost, String serviceCenter, String content) 发送单条短信。 ohos.permission.SEND_MESSAGES sendMultipartMessage(String destinationHost, String serviceCenter, ArrayList<String> parts) 发送拆分后的多条短信。 ohos.permission.SEND_MESSAGES 开发步骤 调用 ShortMessageManager 的 getInstance 接口,创建/获取短信收发管理对象。 调用 hasSmsCapability() 接口获取当前设备短信收发能力,如果支持继续下一步;如果不支持则无法收发短信。 发送短信。 // 创建短信收发管理对象 ShortMessageManager smManager = ShortMessageManager.getInstance(context); // 检查短信能力 if (!smManager.hasSmsCapability()) { return; } // 如果设备支持收发短信,则继续发送短信 // 发送短信前可先调用splitMessage()接口判断拆分后的短信条数,然后决定调用长短信或普通短信发送接口 ArrayList<String> msgs = smManager.splitMessage(messageContent); if (msgs.size() > 1) { // 长短信拆分发送 smManager.sendMultipartMessage(destinationNumber, serviceCenter, msgs); } else { // 一般文本短信发送 smManager.sendMessage(destinationNumber, serviceCenter, messageContent); }

场景介绍 当应用需要发起一路呼叫给一个指定的号码时,使用本业务。呼叫可以是音频呼叫,也可以是视频呼叫。 如果设备支持同时插入两张 SIM 卡,且拨打电话时两张SIM 卡均在位,呼叫时会弹出弹框让用户选择从卡 1 还是卡 2 呼出。 接口说明 DistributedCallManager 为开发者提供呼叫管理功能,具体功能分类如下表。 功能分类 接口名 描述 所需权限 能力获取 hasVoiceCapability() 检查当前设备是否支持语音呼叫。 无 获取管理对象 getInstance(Context context) 获取呼叫管理对象。 无 发起呼叫 dial(String number, boolean isVideoCall) 发起音频或视频呼叫。 ohos.permission.PLACE_CALL 观察通话业务状态变化 addObserver(CallStateObserver observer, int mask) 观察通话业务状态变化。 ohos.permission.READ_CALL_LOG(获取通话号码需要该权限) 开发步骤 调用 DistributedCallManager 的 getInstance 接口,创建/获取呼叫管理对象。 调用 hasVoiceCapability() 接口获取当前设备呼叫能力,如果支持继续下一步;如果不支持则无法发起呼叫。 发起一路呼叫。 注册观察呼叫状态变化。 // 创建呼叫管理对象 DistributedCallManager dcManager = DistributedCallManager.getInstance(context); // 调用查询能力接口 if (!dcManager.hasVoiceCapability()) { return; } // 如果设备支持呼叫能力,则继续发起呼叫 dcManager.dial(destinationNum, isVideoCall); // 创建继承CallStateObserver的类MyCallStateObserver class MyCallStateObserver extends CallStateObserver { // 构造方法,在当前线程的runner中执行回调,slotId需要传入要观察的卡槽ID(0或1) MyCallStateObserver(int slotId) { super(slotId); } // 构造方法,在执行runner中执行回调,slotId需要传入要观察的卡槽ID(0或1) MyCallStateObserver(int slotId, EventRunner runner) { super(slotId, runner); } // 通话状态变化的回调方法 @Override public void onCallStateUpdated(int state, String number) { ... } } // 执行回调的runner EventRunner runner = EventRunner.create(); // 创建MyCallStateObserver的对象 MyCallStateObserver observer = new MyCallStateObserver(slotId, runner); // 观察OBSERVE_CALL_STATE的变化 dcManager.addObserver(observer, CallStateObserver.OBSERVE_CALL_STATE);

电话服务系统,除了为用户提供拨打语音/视频呼叫以及发送标准短信的功能以外,还提供了一系列的 API 用于获取无线蜂窝网络和 SIM 卡相关的一些信息。 其中拨打电话相关功能由 DistributedCallManager 提供,短信服务能力由 ShortMessageManager 提供。 应用还可以通过调用 RadioInfoManager 中的 API,来获取当前注册网络名称、网络服务状态以及信号强度等信息;以及调用 SimInfoManager 中的 API,来获取 SIM 卡的相关信息。 约束与限制 部分 API 接口需要一定访问权限才能调用,因此三方应用在调用有权限控制的API时,需要先申请对应权限,权限申请详见权限章节。 语音呼叫和短信功能暂不支持传入卡槽编号(SlotId),双卡场景下的使用规则详见发起一路呼叫和发送一条文本信息的场景介绍。 注册获取 SIM 卡状态接口仅针对有 SIM 卡在位场景生效,若用户拔出 SIM 卡,则接收不到回调事件。应用可通过调用 hasSimCard 接口来确定当前卡槽是否有卡在位。

场景介绍 应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。 接口说明 管理 HTTP 缓存的功能主要由 HttpResponseCache 类提供。 接口名 功能描述 install(File directory, long size) 使能 HTTP 缓存,设置缓存保存目录及大小。 getInstalled() 获取缓存实例。 flush() 立即保存缓存信息到文件系统中。 close() 关闭缓存功能。 delete() 关闭并清除缓存内容。 开发步骤 配置缓存目录及最大缓存空间。 保存缓存。 关闭缓存。 // 初始化时设置缓存目录dir及最大缓存空间 HttpResponseCache.install(dir, 10 * 1024 * 1024); // 访问URL // 为确保缓存保存到文件系统可以执行flush操作 HttpResponseCache.getInstalled().flush(); // 结束时关闭缓存 HttpResponseCache.getInstalled().close();