优惠码 第115页

场景介绍 对象关系映射数据库适用于开发者使用的数据可以分解为一个或多个对象,且需要对数据进行增删改查等操作,但是不希望编写过于复杂的 SQL 语句的场景。 该对象关系映射数据库的实现是基于关系型数据库,除了数据库版本升降级等场景外,操作对象关系映射数据库一般不需要编写 SQL 语句,但是仍然要求使用者对于关系型数据库的基本概念有一定的了解。 开发能力介绍 对象关系映射数据库目前可以支持数据库和表的创建,对象数据的增删改查、对象数据变化回调、数据库升降级和备份等功能。 数据库和表的创建 创建数据库。开发者需要定义一个表示数据库的类,继承 OrmDatabase,再通过 @Database 注解内的 entities 属性指定哪些数据模型类属于这个数据库。 属性: version:数据库版本号。 entities:数据库内包含的表。 创建数据表。开发者可通过创建一个继承了OrmObject 并用 @Entity 注解的类,获取数据库实体对象,也就是表的对象。 属性: tableName:表名。 primaryKeys:主键名,一个表里只能有一个主键,一个主键可以由多个字段组成。 foreignKeys:外键列表。 indices:索引列表。 接口名称 描述 @Database 被 @Database注解且继承了 OrmDatabase 的类对应数据库类。 @Entity 被 @Entity注解且继承了 OrmObject 的类对应数据表类。 @Column 被 @Column 注解的变量对应数据表的字段。 @PrimaryKey 被 @PrimaryKey 注解的变量对应数据表的主键。 @ForeignKey 被 @ForeignKey 注解的变量对应数据表的外键。 @Index 被 @Index 注解的内容对应数据表索引的属性。 数据库的加密 对象关系映射数据库提供数据库加密的能力,创建数据库时传入指定密钥、创建加密数据库,后续打开加密数据库时,需要传入正确密钥。 类名 接口名 描述 OrmConfig.Builder Builder setEncryptKey(byte[] encryptKey) 为数据库配置类设置数据库加密密钥,创建或打开数据库时传入包含数据库加密密钥的配置类,即可创建或打开加密数据库。 对象数据的增删改查 通过对象数据操作接口,开发者可以对对象数据进行增删改查操作。 类名 接口名称 描述 OrmContext <T extends OrmObject> boolean insert(T object) 添加方法。 OrmContext <T extends OrmObject> boolean update(T object) 更新方法。 OrmContext <T extends OrmObject> List<T> query(OrmPredicates predicates) 查询方法。 OrmContext <T extends OrmObject> boolean delete(T object) 删除方法。 OrmContext <T extends OrmObject> OrmPredicates where(Class<T> clz) 设置谓词方法。 对象数据的变化观察者**设置** 通过使用对象数据操作接口,开发者可以在某些数据上设置观察者,接收数据变化的通知。 类名 接口名称 描述 OrmContext void registerStoreObserver(String alias, OrmObjectObserver observer) 注册数据库变化回调。 OrmContext void registerContextObserver(OrmContext watchedContext, OrmObjectObserver observer) 注册上下文变化回调。 OrmContext void registerEntityObserver(String entityName, OrmObjectObserver observer) 注册数据库实体变化回调。 OrmContext void registerObjectObserver(OrmObject ormObject, OrmObjectObserver observer) 注册对象变化回调。 数据库的升降级 通过调用数据库升降级接口,开发者可以将数据库切换到不同的版本。 类名 接口名称 描述 OrmMigration public void onMigrate(int beginVersion, int endVersion) 数据库版本升降级接口。 数据库的备份恢复 开发者可以将当前数据库的数据进行备份,在必要的时候进行数据恢复。 类名 接口名称 描述 OrmContext boolean backup(String destPath) 数据库备份接口。 OrmContext boolean restore(String srcPath); 数据库恢复备份接口。 开发步骤 配置“build.gradle”文件。 如果使用注解处理器的模块为“com.huawei.ohos.hap”模块,则需要在模块的“build.gradle”文件的“ohos”节点中添加以下配置: compileOptions{ annotationEnabled true } 如果使用注解处理器的模块为“com.huawei.ohos.library”模块,则需要在模块的“build.gradle”文件的“dependencies”节点中配置注解处理器。查看“orm_annotations_java.jar”、“orm_annotations_processor_java.jar” 、“javapoet_java.jar” 这3个 jar 包在 HUAWEI SDK...

HarmonyOS 对象关系映射(Object Relational Mapping,ORM)数据库是一款基于 SQLite 的数据库框架,屏蔽了底层 SQLite 数据库的 SQL 操作,针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的 SQL 语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。 基本概念 对象关系映射数据库的三个主要组件 : 数据库:被开发者用 @Database 注解,且继承了 OrmDatabase 的类,对应关系型数据库。 实体对象:被开发者用 @Entity 注解,且继承了 OrmObject 的类,对应关系型数据库中的表。 对象数据操作接口:包括数据库操作的入口 OrmContext 类和谓词接口(OrmPredicate)等。 谓词 数据库中是用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。对象关系映射数据库将 SQLite 数据库中的谓词封装成了接口方法供开发者调用。开发者通过对象数据操作接口,可以访问到应用持久化的关系型数据。 对象关系映射数据库 通过将实例对象映射到关系上,实现使用操作实例对象的语法,来操作关系型数据库。它是在 SQLite 数据库的基础上提供的一个抽象层。 SQLite 数据库 一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统。 运作机制 对象关系映射数据库操作是基于关系型数据库操作接口完成的,实际是在关系型数据库操作的基础上又实现了对象关系映射等特性。因此对象关系映射数据库跟关系型数据库一样,都使用 SQLite 作为持久化引擎,底层使用的是同一套数据库连接池和数据库连接机制。 使用对象关系映射数据库的开发者需要先配置实体模型与关系映射文件。应用数据管理框架提供的类生成工具会解析这些文件,生成数据库帮助类,这样应用数据管理框架就能在运行时,根据开发者的配置创建好数据库,并在存储过程中自动完成对象关系映射。开发者再通过对象数据操作接口,如 OrmContext 接口和谓词接口等操作持久化数据库。 对象数据操作接口提供一组基于对象映射的数据操作接口,实现了基于 SQL 的关系模型数据到对象的映射,让用户不需要再和复杂的 SQL 语句打交道,只需简单地操作实体对象的属性和方法。对象数据操作接口支持对象的增删改查操作,同时支持事务操作等。 图1 对象关系映射数据库运作机制 默认配置 如果不指定数据库的日志模式,那么系统默认日志方式是 WAL(Write Ahead Log)模式。 如果不指定数据库的落盘模式,那么系统默认落盘方式是 FULL模式。 HarmonyOS 数据库使用的共享内存默认大小是 2MB。 约束与限制 HarmonyOS 对象关系映射数据库是建立在 HarmonyOS 关系型数据库的基础之上的,所以关系型数据库的一些约束与限制请参考约束与限制。 此外当开发者建立实体对象类时,对象属性的类型可以在下表的类型中选择。不支持使用自定义类型。 类型名称 描述 初始值 Integer 封装整型 null int 整型 0 Long 封装长整型 null long 长整型 0L Double 封装双精度浮点型 null double 双精度浮点型 0 Float 封装单精度浮点型 null float 单精度浮点型 0 Short 封装短整型 null short 短整型 0 String 字符串型 null Boolean 封装布尔型 null boolean 布尔型 0 Byte 封装字节型 null byte 字节型 0...

场景介绍 关系型数据库是在 SQLite 基础上实现的本地数据操作机制,提供给用户无需编写原生 SQL 语句就能进行数据增删改查的方法,同时也支持原生 SQL 操作。 接口说明 数据库的创建和删除 关系型数据库提供了数据库创建方式,以及对应的删除接口,涉及的 API 如下所示。 类名 接口名 描述 StoreConfig.Builder public builder() 对数据库进行配置,包括设置数据库名、存储模式、日志模式、同步模式,是否为只读,及对数据库加密。 RdbOpenCallback public abstract void onCreate(RdbStore store) 数据库创建时被回调,开发者可以在该方法中初始化表结构,并添加一些应用使用到的初始化数据。 RdbOpenCallback public abstract void onUpgrade(RdbStore store, int currentVersion, int targetVersion) 数据库升级时被回调。 DatabaseHelper public RdbStore getRdbStore(StoreConfig config, int version, RdbOpenCallback openCallback, ResultSetHook resultSetHook) 根据配置创建或打开数据库。 DatabaseHelper public boolean deleteRdbStore(String name) 删除指定的数据库。 数据库的加密 关系型数据库提供数据库加密的能力,创建数据库时传入指定密钥、创建加密数据库,后续打开加密数据库时,需要传入正确密钥。 类名 接口名 描述 StoreConfig.Builder Builder setEncryptKey(byte[] encryptKey) 为数据库配置类设置数据库加密密钥,创建或打开数据库时传入包含数据库加密密钥的配置类,即可创建或打开加密数据库。 数据库的增删改查 关系型数据库提供本地数据增删改查操作的能力,相关 API 如下所示。 新增 关系型数据库提供了插入数据的接口,通过 ValuesBucket 输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败则返回 -1。 类名 接口名 描述 RdbStore long insert(String table, ValuesBucket initialValues) 向数据库插入数据。table:待添加数据的表名。initialValues:以ValuesBucket存储的待插入的数据。它提供一系列put方法,如putString(String columnName, String values),putDouble(String columnName, double value),用于向ValuesBucket中添加数据。 更新 调用更新接口,传入要更新的数据,并通过AbsRdbPredicates 指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。 类名 接口名 描述 RdbStore int update(ValuesBucket values, AbsRdbPredicates predicates) 更新数据库表中符合谓词指定条件的数据。values:以 ValuesBucket 存储的要更新的数据。predicates:指定了更新操作的表名和条件。AbsRdbPredicates 的实现类有两个:RdbPredicates 和 RawRdbPredidates。RdbPredicates:支持调用谓词提供的 equalTo 等接口,设置更新条件。RawRdbPredidates:仅支持设置表名、where 条件子句、whereArgs 三个参数,不支持equalTo 等接口调用。 删除 调用删除接口,通过 AbsRdbPredicates 指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回 0。 类名 接口名 描述 RdbStore int delete(AbsRdbPredicates predicates) 删除数据。predicates:Rdb 谓词,指定了删除操作的表名和条件。AbsRdbPredicates 的实现类有两个:RdbPredicates 和 RawRdbPredidates。RdbPredicates:支持调用谓词提供的 equalTo 等接口,设置更新条件。 RawRdbPredidates:仅支持设置表名、where 条件子句、whereArgs 三个参数,不支持 equalTo 等接口调用。 查询 关系型数据库提供了两种查询数据的方式: 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的 SQL 语句进行查询操作,无需用户传入原生的 SQL。 执行原生的用于查询的 SQL 语句。 类名 接口名 描述 RdbStore ResultSet query(AbsRdbPredicates predicates, String[] columns) 查询数据。predicates:谓词,可以设置查询条件。AbsRdbPredicates 的实现类有两个: RdbPredicates 和 RawRdbPredidates。 RdbPredicates:支持调用谓词提供的 equalTo 等接口,设置查询条件。RawRdbPredidates:仅支持设置表名、where 条件子句、whereArgs 三个参数,不支持 equalTo 等接口调用。columns:规定查询返回的列。 RdbStore ResultSet querySql(String sql, String[] sqlArgs) 执行原生的用于查询操作的 SQL 语句。sql:原生用于查询的 sql 语句。sqlArgs:sql 语句中占位符参数的值,若 select 语句中没有使用占位符,该参数可以设置为 null。 数据库谓词的使用 关系型数据库提供了用于设置数据库操作条件的谓词 AbsRdbPredicates,其中包括两个实现子类 RdbPredicates 和 RawRdbPredicates: RdbPredicates:开发者无需编写复杂的 SQL 语句,仅通过调用该类中条件相关的方法,如 equalTo、notEqualTo、groupBy、orderByAsc、beginsWith 等,就可自动完成 SQL 语句拼接,方便用户聚焦业务操作。 RawRdbPredicates:可满足复杂 SQL 语句的场景,支持开发者自己设置 where 条件子句和 whereArgs 参数。不支持 equalTo 等条件接口的使用。 类名 接口名 描述 RdbPredicates RdbPredicates equalTo(String field, String value) 设置谓词条件,满足filed字段与value值相等。...

关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。HarmonyOS 关系型数据库基于 SQLite 组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查接口,也可以直接运行用户输入的 SQL 语句来满足复杂的场景需要。HarmonyOS 提供的关系型数据库功能更加完善,查询效率更高。 基本概念 关系型数据库 创建在关系模型基础上的数据库,以行和列的形式存储数据。 谓词 数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。 结果集 指用户查询之后的结果集合,可以对数据进行访问。结果集提供了灵活的数据访问方式,可以更方便的拿到用户想要的数据。 SQLite数据库 一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统。它是一个开源的项目。 运作机制 HarmonyOS 关系型数据库对外提供通用的操作接口,底层使用 SQLite 作为持久化存储引擎,支持 SQLite 具有的所有数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译 SQL 语句。 图1 关系型数据库运作机制 默认配置 如果不指定数据库的日志模式,那么系统默认日志方式是 WAL(Write Ahead Log)模式。 如果不指定数据库的落盘模式,那么系统默认落盘方式是 FULL 模式。 HarmonyOS 数据库使用的共享内存默认大小是 2MB。 约束与限制 数据库中连接池的最大数量是 4 个,用以管理用户的读写操作。 为保证数据的准确性,数据库同一时间只能支持一个写操作。

场景介绍 TTS、Wireless、Network、Input、Sound、Display、Date、Call、General 九类定义了表征终端设备状态的相关字段,如屏幕亮度、日期格式、字体显示大小等,应用程序可以根据自身所拥有的权限对其进行增、删、改、查等操作,并进行相应的场景适配。 例如:TIME_FORMAT——表示日期格式,应用程序可进行读写。 图1 数据表更新过程 接口说明 SystemSettings 提供系统设置的相关接口,包括 TTS、Wireless、Network、Input、Sound、Display、Date、Call、General 九类字段的存储和检索接口。应用程序通过 AppSettings 类提供的方法对其自身的能力进行查询。 接口名 描述 canShowOverlays(Context context) 检查指定应用程序是否可以显示在其他应用之上。 checkSetPermission(Context context) 通过应用上下文检查指定的应用是否具有修改系统设置的权限。 接口名 描述 getUri(String name) 为特定的字段构造URI,用于DataAbility的数据监视。 getValue(DataAbilityHelper dataAbilityHelper, String name) 获取指定字段的值。 setValue(DataAbilityHelper dataAbilityHelper, String name, String value) 设置指定字段的值。 字段名 字段描述 DEFAULT_TTS_PITCH 文本转语音引擎的默认音调。 DEFAULT_TTS_RATE 文本转语音引擎的默认语速。 字段名 字段描述 BLUETOOTH_STATUS 蓝牙开启状态。 WIFI_STATUS WLAN是否启用。 WIFI_TO_MOBILE_DATA_AWAKE_TIMEOUT 从WLAN 断开连接后等待建立移动数据连接时保持唤醒锁的最长时间。 字段名 字段描述 DATA_ROAMING_STATUS 数据漫游开启状态。 NETWORK_PREFERENCE_USAGE 设置用户经常使用的网络。 字段名 字段描述 DEFAULT_INPUT_METHOD 设置默认的输入法,并记录此输入法的ID。 ACTIVATED_INPUT_METHODS 已激活的输入法列表。 AUTO_CAPS_TEXT_INPUT 设置文本编辑器是否启用自动大写。 字段名 字段描述 HAPTIC_FEEDBACK_STATUS 设置是否开启触摸反馈。 VIBRATE_WHILE_RINGING 设置来电响铃时是否震动。 DEFAULT_NOTIFICATION_SOUND 系统默认通知铃声的存储区。 字段名 字段描述 FONT_SCALE 设置字体大小因子。 SCREEN_BRIGHTNESS_STATUS 设置屏幕亮度。 AUTO_SCREEN_BRIGHTNESS 设置是否打开屏幕亮度自动调节模式。 SCREEN_OFF_TIMEOUT 设置设备屏幕自动休眠时间。 字段名 字段描述 DATE_FORMAT 设置日期格式。 TIME_FORMAT 设置以12或24小时制显示时间。 AUTO_GAIN_TIME 是否从网络(NITZ)自动获取日期,时间和时区的值。 AUTO_GAIN_TIME_ZONE 是否从网络(NITZ)自动获取时区的值。 字段名 字段描述 SETUP_WIZARD_FINISHED 识别开机向导是否已经运行过。 AIRPLANE_MODE_STATUS 飞行模式是否开启。 DEVICE_NAME 设备名称。 ACCESSIBILITY_STATUS 设置辅助功能是否可用。 字段名 字段描述 RTT_CALLING_STATUS 设置来去电是否启动RTT模式进行应答。 开发步骤 应用程序打开某个 Slice 时,在 OnStart()时,注册相关设置项的回调,并读取一次该设置项的值,进行初始化适配。 场景介绍 TTS、Wireless、Network、Input、Sound、Display、Date、Call、General九类定义了表征终端设备状态的相关字段,如屏幕亮度、日期格式、字体显示大小等,应用程序可以根据自身所拥有的权限对其进行增、删、改、查等操作,并进行相应的场景适配。 例如:TIME_FORMAT——表示日期格式,应用程序可进行读写。 图1 数据表更新过程 点击放大 接口说明 SystemSettings 提供系统设置的相关接口,包括TTS、Wireless、Network、Input、Sound、Display、Date、Call、General 九类字段的存储和检索接口。应用程序通过 AppSettings 类提供的方法对其自身的能力进行查询。 表1 AppSettings的主要接口 接口名 描述 canShowOverlays(Context context)...

应用程序可以对系统各类设置项进行增、删、改、查等操作。例如,三方应用提前注册飞行模式设置项的回调,当用户通过系统设置修改终端的飞行模式状态时,三方应用会检测到此设置项发生变化并进行适配。如检测到飞行模式开启,将进入离线状态;检测到飞行模式关闭,其将重新获取在线数据。 基本概念 系统设置数据项分为 TTS(Text To Speech)、Wireless、Network、Input、Sound、Display、Date、Call、General 九类,应用程序可以根据自身拥有的权限对其进行操作。

场景介绍 使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。 系统向开发者提供了地理编码转化能力(将坐标转化为地理编码信息),以及逆地理编码转化能力(将地理描述转化为具体坐标)。其中地理编码包含多个属性来描述位置,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解。 接口说明 进行坐标和地理编码信息的相互转化,所使用的接口说明如下。 接口名 功能描述 GeoConvert() 创建 GeoConvert 实例对象。 getAddressFromLocation(double latitude, double longitude, int maxItems) 根据指定的经纬度坐标获取地理位置信息。 getAddressFromLocationName(String description, int maxItems) 根据地理位置信息获取相匹配的包含坐标数据的地址列表。 getAddressFromLocationName(String description, double minLatitude, double minLongitude, double maxLatitude, double maxLongitude,int maxItems) 根据指定的位置信息和地理区域获取相匹配的包含坐标数据的地址列表。 开发步骤 实例化 GeoConvert 对象,所有与(逆)地理编码转化能力相关的功能 API,都是通过 GeoConvert 提供的。 GeoConvert geoConvert = new GeoConvert(); 获取转化结果。 坐标转化地理位置信息。 geoConvert.getAddressFromLocation(纬度值, 经度值, 1); 参考接口 API 说明,应用可以获得与此坐标匹配的 GeoAddress 列表,应用可以根据实际使用需求,读取相应的参数数据。 位置描述转化坐标。 geoConvert.getAddressFromLocationName("北京大兴国际机场", 1); 参考接口 API 说明,应用可以获得与位置描述相匹配的 GeoAddress 列表,其中包含对应的坐标数据,请参考 API 使用。 如果需要查询的位置描述可能出现多地重名的请求,可以同过设置一个经纬度范围,以便高效获取期望的准确结果。 geoConvert.getAddressFromLocationName("北京大兴国际机场", 纬度下限, 经度下限, 纬度上限, 经度上限, 1);

场景介绍 开发者可以调用 HarmonyOS 位置相关接口,获取设备实时位置,或者最近的历史位置。 对于位置敏感的应用业务,建议获取设备实时位置信息。如果不需要设备实时位置信息,并且希望尽可能的节省耗电,开发者可以考虑获取最近的历史位置。 接口说明 获取设备的位置信息,所使用的接口说明如下。 接口名 功能描述 Locator(Context context) 创建 Locator 实例对象。 RequestParam(int scenario) 根据定位场景类型创建定位请求的 RequestParam 对象。 onLocationReport(Location location) 获取定位结果。 startLocating(RequestParam request, LocatorCallback callback) 向系统发起定位请求。 requestOnce(RequestParam request, LocatorCallback callback) 向系统发起单次定位请求。 stopLocating(LocatorCallback callback) 结束定位。 getCachedLocation() 获取系统缓存的位置信息。 开发步骤 应用在使用系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。 系统提供的定位权限有: ohos.permission.LOCATION ohos.permission.LOCATION_IN_BACKGROUND 访问设备的位置信息,必须申请 ohos.permission.LOCATION 权限,并且获得用户授权。 如果应用在后台运行时也需要访问设备位置,除需要将应用声明为允许后台运行外,还必须申请 ohos.permission.LOCATION_IN_BACKGROUND 权限,这样应用在切入后台之后,系统依然可以继续上报位置信息。 开发者可以在应用 config.json 文件中声明所需要的权限,示例代码如下: { "reqPermissions": [{ "name": "ohos.permission.LOCATION", "reason": "$string:reason_description", "usedScene": { "ability": ["com.myapplication.LocationAbility"], "when": "inuse" }, { ... }] }] } 说明 配置字段详细说明见权限开发指导。在使用系统位置能力时,向用户动态申请位置权限,申请方式请参考动态申请权限开发步骤。 实例化 Locator 对象,所有与基础定位能力相关的功能 API,都是通过 Locator 提供的。 Locator locator = new Locator(context); 其中入参需要提供当前应用程序的 AbilityInfo 信息,便于系统管理应用的定位请求。 实例化 RequestParam 对象,用于告知系统该向应用提供何种类型的位置服务,以及位置结果上报的频率。 方式一: 为了面向开发者提供贴近其使用场景的 API 使用方式,系统定义了几种常见的位置能力使用场景,并针对使用场景做了适当的优化处理,应用可以直接匹配使用,简化开发复杂度。系统当前支持场景如下表所示。 场景名称 常量定义 说明 导航场景 SCENE_NAVIGATION 适用于在户外定位设备实时位置的场景,如车载、步行导航。在此场景下,为保证系统提供位置结果精度最优,主要使用 GNSS 定位技术提供定位服务,结合场景特点,在导航启动之初,用户很可能在室内、车库等遮蔽环境, GNSS 技术很难提供位置服务。为解决此问题,我们会在 GNSS 提供稳定位置结果之前,使用系统网络定位技术,向应用提供位置服务,以在导航初始阶段提升用户体验。此场景默认以最小 1 秒间隔上报定位结果,使用此场景的应用必须申请 ohos.permission.LOCATION 权限,同时获得用户授权。 轨迹跟踪场景 SCENE_TRAJECTORY_TRACKING 适用于记录用户位置轨迹的场景,如运动类应用记录轨迹功能。主要使用 GNSS 定位技术提供定位服务。此场景默认以最小 1 秒间隔上报定位结果,并且应用必须申请 ohos.permission.LOCATION 权限,同时获得用户授权。 出行约车场景 SCENE_CAR_HAILING 适用于用户出行打车时定位当前位置的场景,如网约车类应用。此场景默认以最小 1 秒间隔上报定位结果,并且应用必须申请 ohos.permission.LOCATION 权限,同时获得用户授权。 生活服务场景 SCENE_DAILY_LIFE_SERVICE 生活服务场景,适用于不需要定位用户精确位置的使用场景,如新闻资讯、网购、点餐类应用,做推荐、推送时定位用户大致位置即可。此场景默认以最小 1 秒间隔上报定位结果,并且应用至少申请 ohos.permission.LOCATION 权限,同时获得用户授权。 无功耗场景 SCENE_NO_POWER 无功耗场景,适用于不需要主动启动定位业务。系统在响应其他应用启动定位业务并上报位置结果时,会同时向请求此场景的应用程序上报定位结果,当前的应用程序不产生定位功耗。此场景默认以最小 1 秒间隔上报定位结果,并且应用需要申请 ohos.permission.LOCATION 权限,同时获得用户授权。 以导航场景为例,实例化方式如下: RequestParam requestParam = new RequestParam(RequestParam.SCENE_NAVIGATION); 方式二: 如果定义的现有场景类型不能满足所需的开发场景,系统提供了基本的定位优先级策略类型。 策略类型 常量定义 说明 定位精度优先策略 PRIORITY_ACCURACY 定位精度优先策略主要以 GNSS 定位技术为主,在开阔场景下可以提供纳米级的定位精度,具体性能指标依赖用户设备的定位硬件能力,但在室内等强遮蔽定位场景下,无法提供准确的位置服务。应用必须申请 ohos.permission.LOCATION 权限,同时获得用户授权。 快速定位优先策略 PRIORITY_FAST_FIRST_FIX 快速定位优先策略会同时使用GNSS定位、基站定位和 WLAN、蓝牙定位技术,以便室内和户外场景下,通过此策略都可以获得位置结果,当各种定位技术都有提供位置结果时,系统会选择其中精度较好的结果返回给应用。因为对各种定位技术同时使用,对设备的硬件资源消耗较大,功耗也较大。应用必须申请 ohos.permission.LOCATION 权限,同时获得用户授权。 低功耗定位优先策略 PRIORITY_LOW_POWER 低功耗定位优先策略主要使用基站定位和 WLAN、蓝牙定位技术,也可以同时提供室内和户外场景下的位置服务,因为其依赖周边基站、可见 WLAN、蓝牙设备的分布情况,定位结果的精度波动范围较大,如果对定位结果精度要求不高,或者使用场景多在有基站、可见 WLAN、蓝牙设备高密度分布的情况下,推荐使用,可以有效节省设备功耗。应用至少申请 ohos.permission.LOCATION 权限,同时获得用户授权。 以定位精度优先策略为例,实例化方式如下: RequestParam requestParam...

移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。 当用户处于这些丰富的使用场景中时,系统的位置能力可以提供实时准确的位置数据。对于开发者,设计基于位置体验的服务,也可以使应用的使用体验更贴近每个用户。 当应用在实现基于设备位置的功能时,如:驾车导航,记录运动轨迹等,可以调用该模块的 API 接口,完成位置信息的获取。 基本概念 位置能力用于确定用户设备在哪里,系统使用位置坐标标示设备的位置,并用多种定位技术提供服务,如 GNSS 定位、基站定位、WLAN/蓝牙定位(基站定位、WLAN/蓝牙定位后续统称“网络定位技术”)。通过这些定位技术,无论用户设备在室内或是户外,都可以准确地确定设备位置。 坐标 系统以1984年世界大地坐标系统为参考,使用经度、纬度数据描述地球上的一个位置。 GNSS 定位 基于全球导航卫星系统,包含:GPS、GLONASS、北斗、Galileo 等,通过导航卫星,设备芯片提供的定位算法,来确定设备准确位置。定位过程具体使用哪些定位系统,取决于用户设备的硬件能力。 基站定位 根据设备当前驻网基站和相邻基站的位置,估算设备当前位置。此定位方式的定位结果精度相对较低,并且需要设备可以访问蜂窝网络。 WLAN、蓝牙定位 根据设备可搜索到的周围 WLAN、蓝牙设备位置,估算设备当前位置。此定位方式的定位结果精度依赖设备周围可见的固定 WLAN、蓝牙设备的分布,密度较高时,精度也相较与基站定位方式更高,同时也需要设备可以访问网络。 运作机制 位置能力作为系统为应用提供的一种基础服务,需要应用在所使用的业务场景,向系统主动发起请求,并在业务场景结束时,主动结束此请求,在此过程中系统会将实时的定位结果上报给应用。 约束与限制 使用设备的位置能力,需要用户进行确认并主动开启位置开关。如果位置开关没有开启,系统不会向任何应用提供位置服务。 设备位置信息属于用户敏感数据,所以即使用户已经开启位置开关,应用在获取设备位置前仍需向用户申请位置访问权限。在用户确认允许后,系统才会向应用提供位置服务。

场景介绍 当设备需要设置不同的振动效果时,可以调用 Vibrator 模块,例如,设备的按键可以设置不同强度和时长的振动,闹钟和来电可以设置不同强度和时长的单次或周期性振动。 接口说明 振动器模块主要提供的功能有:查询设备上振动器的列表,查询某个振动器是否支持某种振动效果,触发和关闭振动器。VibratorAgent 类开放能力如下,具体请查阅 API 参考文档。 接口名 描述 getVibratorIdList() 获取硬件设备上的振动器列表。 isSupport(int) 根据指定的振动器Id查询硬件设备是否存在该振动器。 isEffectSupport(int, String) 查询指定的振动器是否支持指定的震动效果。 startOnce(int, String) 对指定的振动器创建指定效果的一次性振动。 startOnce(String) 对指定的振动器创建指定效果的一次性振动。 startOnce(int, int) 对指定的振动器创建指定振动时长的一次性振动。 startOnce(int) 对指定的振动器创建指定振动时长的一次性振动。 start(int, VibrationPattern) 对指定的振动器创建自定义效果的波形或一次性振动。 start(VibrationPattern) 对指定的振动器创建自定义效果的波形或一次性振动。 stop(int, String) 关闭指定的振动器指定模式的振动。 stop(String) 关闭指定的振动器指定模式的振动。 开发步骤 控制设备上的振动器,需要在“config.json”里面进行配置请求权限。具体如下: "reqPermissions": [ { "name": "ohos.permission.VIBRATE", "reason": "", "usedScene": { "ability": [ ".MainAbility" ], "when": "inuse" } } ] 查询硬件设备上的振动器列表。 查询指定的振动器是否支持指定的震动效果。 创建不同效果的振动。 关闭指定的振动器指定模式的振动。 private VibratorAgent vibratorAgent = new VibratorAgent(); private int[] timing = {1000, 1000, 2000, 5000}; private int[] intensity = {50, 100, 200, 255}; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_vibrator_layout); // ... // 查询硬件设备上的振动器列表 List<Integer> vibratorList = vibratorAgent.getVibratorIdList(); if (vibratorList.isEmpty()) { return; } int vibratorId = vibratorList.get(0); // 查询指定的振动器是否支持指定的振动效果 boolean isSupport = vibratorAgent.isEffectSupport(vibratorId, VibrationPattern.VIBRATOR_TPYE_CAMERA_CLICK); // 创建指定效果的一次性振动 boolean vibrateEffectResult = vibratorAgent.vibrate(vibratorId, VibrationPattern.VIBRATOR_TPYE_CAMERA_CLICK); // 创建指定振动时长的一次性振动...