HarmonyOS ArkUi 唤起系统APP:指定设置界面、浏览器、相机、拨号界面、选择通讯录联系人

  • 效果:
    在这里插入图片描述

  • 完整工具类:

import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { call } from '@kit.TelephonyKit';
import { promptAction } from '@kit.ArkUI';
import { contact } from '@kit.ContactsKit';
import { camera, cameraPicker } from '@kit.CameraKit';export class SystemAppUtil {static tag: string = 'SystemAppUtil  '/*** 唤起系统浏览器应用* */static openBrowsable(url: string) {if (!url) {promptAction.showToast({ message: "唤起系统浏览器失败,url为空!" })return}if (getContext()) {let context = getContext() as common.UIAbilityContext;let want: Want = {action: 'ohos.want.action.viewData',entities: ['entity.system.browsable'],uri: url};context.startAbility(want).then(() => {console.info(SystemAppUtil.tag + ' 拉起浏览器成功');}).catch((err: BusinessError) => {console.error(SystemAppUtil.tag + ` 拉起浏览器失败: Code: ${err.code}, message: ${err.message}`);});} else {promptAction.showToast({ message: "唤起系统浏览器失败,context为空!" })}}/*** 唤起系统拨号界面* */static startCall(phoneNumber: string): void {if (!phoneNumber) {promptAction.showToast({ message: "唤起系统拨号界面失败,手机号码为空!" })return}// 检测是否支持语音通话let isSupport = call.hasVoiceCapability();if (!isSupport) {console.error(SystemAppUtil.tag + '不支持语音通话');return;}call.makeCall(phoneNumber, (err: BusinessError) => {if (err) {console.error(SystemAppUtil.tag + `唤起拨号界面失败. Code is ${err.code}, Message is ${err.message}`);return;}console.info(SystemAppUtil.tag + '唤起拨号界面成功');})}/*** 通讯录:打开通讯录并选择联系人,通过 promise回调* @param isMultiSelect 选择联系人,是否允许多选  true:支持多选* */static async selectContacts(isMultiSelect: boolean = false): Promise<Array<contact.Contact>> {let promise = await contact.selectContacts({ isMultiSelect: isMultiSelect });return promise}/*** 打开指定设置界面:对应界面关系*  * wifi_entry : HOME-WLAN* bluetooth_entry : HOME-蓝牙* mobile_network_entry: HOME-移动网络* hotspot_data_settings: HOME-移动网络-个人热点界面* password_entry: HOME-移动网络-个人热点-密码界面* connected_device_entry: HOME-移动网络-个人热点-已连接设备界面* more_share_entry: HOME-移动网络-个人热点-更多共享设置界面* more_connections_settings: HOME-更多连接* nfc_settings: HOME-更多连接-NFC三级页面* display_settings: HOME-显示和亮度* screen_zoom: HOME-显示和亮度-显示大小三级页面* screen_refresh_rate_entry: HOME-显示和亮度-屏幕刷新率三级页面  (需看具体设备是否有刷新率选项)* volume_settings: HOME-声音和振动* systemui_notification_settings: HOME-通知和状态栏* accessibility_feature: accessibility_feature* accessibility_operation_entry: HOME-辅助功能-辅助功能快捷键三级页面* accessibility_more_settings_entry: HOME-辅助功能-已安装的服务-服务详情-更多设置五级页面* application_and_service_settings: HOME-应用与元服务* application_settings: HOME-应用与服务-应用管理三级页面* application_info_entry: HOME-应用和元服务HOME-某个具体应用的应用信息,需传递want.parameters.pushParams为具体应用的包名* storage_settings: HOME-存储界面* battery: HOME-电池* biometrics_and_password_settings: HOME-生物识别和密码* lock_screen_password_title: HOME-生物识别和密码-设置数字锁屏密码* change_six_to_number_entry: HOME-生物识别和密码-锁屏密码(其他密码类型)-自定义数字密码(设置锁屏数字密码)四级页面* hange_six_to_mixed_entry: HOME-生物识别和密码-锁屏密码(其他密码类型)-混合密码(设置锁屏密码)四级页面* fingerprint_settings_entry: HOME-生物识别与密码-指纹3级页面  (需看具体设备是否支持指纹解锁能力)* privacy_settings: HOME-隐私与安全* location_help_entry: HOME-隐私与安全-定位服务-帮助四级页面* users_accounts: HOME-用户和账户* current_user: HOME-用户和账户-当前登录(用户)三级页面* system_and_updates: HOME-系统和更新* time_zone_settings: HOME-系统和更新-日期时间-时区-时区选择列表* date_and_time: HOME-系统和更新-日期时间三级页面* set_language: HOME-系统和更新-语言和输入法-语言和输入法四级页面* set_language_region: HOME-系统和更新-语言和输入法-语言和地区-语言和地区5级页面* reset_settings: HOME-系统和更新-重置三级页面* developer_options_settings: HOME-系统和更新-开发人员选项三级页面* edit_language_entry: HOME-系统和更新-语言和输入法-语言和地区-编辑(编译语言)五级页面* add_language_entry: HOME-系统和更新-语言和输入法-语言和地区-添加语言五级页面* select_region_entry: HOME-系统和更新-语言和输入法-语言和地区-当前地区(选择地区)五级页面* reset_factory_settings: HOME-系统和更新-重置-恢复出厂设置四级页面* reset_net_settings: HOME-系统和更新-重置-还原网络设置四级页面* reset_confirm_settings: HOME-系统和更新-重置-恢复出厂设置-重置手机五级页面* reset_net_confirm_settings: HOME-系统和更新-重置-还原网络设置-还原网络设置确认五级页面* about_device: HOME-关于本机界面* device_name: HOME-HOME-关于本机-设备名称*  * */static openDesignateSetting(uri: string) {if (getContext()) {let ctx = getContext() as common.UIAbilityContext;let applicationInfo = ctx.getApplicationContext().applicationInfoctx.startAbility({bundleName: 'com.huawei.hmos.settings',abilityName: 'com.huawei.hmos.settings.MainAbility',uri: uri,parameters: {pushParams: applicationInfo.name // 包名}});} else {promptAction.showToast({ message: "唤起打开指定设置界面失败,context为空!" })}}/*** 打开在华为市场的应用详情* */static openAppGalleryDetailAbility(bundleName: string): void {if (getContext()) {let ctx = getContext() as common.UIAbilityContext;let want: Want = {action: 'ohos.want.action.appdetail',uri: 'store://appgallery.huawei.com/app/detail?id=' + bundleName, // bundleName为需要打开应用详情的应用的包名};ctx.startAbility(want).then(() => {console.info(SystemAppUtil.tag + ' 打开应用市场成功');}).catch((err: BusinessError) => {console.error(SystemAppUtil.tag + `打开应用市场失败. Code: ${err.code}, message: ${err.message}`);});} else {promptAction.showToast({ message: "打开在华为市场的应用详情,context为空!" })}}/*** 打开相机* */static async startCameraPicker(): Promise<cameraPicker.PickerResult> {if (getContext()) {let ctx = getContext() as common.UIAbilityContext;try {let pickerProfile: cameraPicker.PickerProfile = {cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK};// PickerMediaType 配置打开类型let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(ctx,[cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO],pickerProfile);return pickerResult} catch (error) {let err = error as BusinessError;console.error(SystemAppUtil.tag + `相机打开失败. error code: ${err.code}`);return new cameraPicker.PickerResult()}} else {promptAction.showToast({ message: "打开相机,context为空!" })return new cameraPicker.PickerResult()}}
}
  • 使用
import { SystemAppUtil } from '../../util/SystemAppUtil'
import { common } from '@kit.AbilityKit'
import { BusinessError } from '@kit.BasicServicesKit'@Entry
@Component
export struct SystemAppUtilTestWidget {aboutToAppear() {}@State contacts: string = '选择联系人数据'@State pick: string = ' 拍照/录像结果'build() {Column() {Button('唤起系统浏览器').onClick(() => {let url = 'https://developer.huawei.com/consumer/cn/activity/'SystemAppUtil.openBrowsable(url)})Button('唤起拨号界面').onClick(() => {SystemAppUtil.startCall('13711111111')}).margin({ top: 15 })Button('打开通讯录选择联系人').onClick(() => {SystemAppUtil.selectContacts().then((data) => {this.contacts = JSON.stringify(data)console.log(`selectContacts success: data->${JSON.stringify(data)}`);}).catch((err: BusinessError) => {this.contacts = JSON.stringify(err)console.error(`selectContacts fail: err->${JSON.stringify(err)}`);});}).margin({ top: 15 })Text(this.contacts)Button('权限指定设置界面').onClick(() => {SystemAppUtil.openDesignateSetting('bluetooth_entry')}).margin({ top: 15 })Button('打开应用市场').onClick(() => {// 替换上架app的包名SystemAppUtil.openAppGalleryDetailAbility('app的包名')}).margin({ top: 15 })Button('打开相机').onClick(() => {SystemAppUtil.startCameraPicker().then((data) => {console.log(`startCameraPicker success: data->${JSON.stringify(data)}`);this.pick = JSON.stringify(data)})}).margin({ top: 15 })Text(`拍照结果:${this.pick}`)}.height('100%').padding({ top: 70 })}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等

功能如图&#xff1a; docker部署 version: "3" services:excalidraw:image: dannicool/docker-wechatbot-webhook:latestcontainer_name: wechatbot-webhookdeploy:resources:limits:cpus: 0.15memory: 500Mreservations:cpus: 0.05memory: 80Mrestart: alwayspor…

RabbitMQ学习实践二:MQ的实现

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录&#xff0c;仅供参考&#xff0c;如有侵权请随时指出。 参考文章地址&#xff1a; RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…

走进数组的奇妙之旅

引言&#xff1a; 在前几篇文章中&#xff0c;我们深入探讨了函数的奥秘。在讲述函数知识的过程中&#xff0c;我们邂逅了一个新的概念&#xff0c;你或许还记得在演示 strcpy函数时&#xff0c;出现的这行代码&#xff1a;char1[20]{0};。当时&#xff0c;你是否感到好奇&…

scp免密复制文件

实现在服务器A和服务器B之间使用scp命令免密互相传输文件 1. 在服务器A中免密复制到服务器B 1.1 生成服务器A的公钥私钥 #在服务器A中执行 ssh-keygen -t rsa -P ""命令执行完毕会在服务器A的 ~/.ssh 目录下生成两个文件&#xff1a;id_rsa 和 id_rsa.pub 1.2 拷…

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战&#xff0c;重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …

外企跨境传输应该如何做到安全有效的文件管控?

跨境文件传输并非易事&#xff0c;它面临着多重挑战&#xff0c;尤其是数据安全、隐私保护以及法律法规遵守等问题。所以如何做到安全有效的文件管控&#xff0c;却是一个让许多企业头疼的问题。小编今天将说说跨境文件传输面临的主要挑战&#xff0c;并讨论如何选择合适的加密…

【深度学习】PyTorch框架(3):优化与初始化

1.引言 在本文中&#xff0c;我们将探讨神经网络的优化与初始化技术。随着神经网络深度的增加&#xff0c;我们会遇到多种挑战。最关键的是确保网络中梯度流动的稳定性&#xff0c;否则可能会遭遇梯度消失或梯度爆炸的问题。因此&#xff0c;我们将深入探讨以下两个核心概念&a…

Linux-mysql数据备份恢复

MySQL数据备份与恢复 一、备份介绍 1、为什么要备份 备份&#xff1a;能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方。 冗余&#xff1a; 数据有多份冗余&#xff0c;但不等备份&#xff0c;只能防止机械故障带来的数据丢…

《JavaSE》---17.<String 类的常见操作>

目录 前言 一、String类的常见用法 1.1 字符串构造&#xff08;常见三种&#xff09; ①使用常量串构造 ②直接newString对象 ③ 使用字符数组进行构造 注意&#xff1a; 1.2 String对象的比较 1. 比较是否引用同一个对象 2. boolean equals(Object anObject) 方法&a…

Activiti7实战

Activiti7与SpringBoot 整合开发 介绍 流程定义如下&#xff1a; 流程如下&#xff1a;申请人提出请假申请后&#xff0c;上级领导看到进行审批&#xff0c;如果时间超过三天&#xff0c;需要校长复审&#xff0c;三天之内直接人事存档。 进入开发工作&#xff0c;具体步骤如…

【数据结构】:时间和空间复杂度在这篇里面一点都不复杂

目录 如何衡量一个代码的好坏 时间复杂度 概念 计算方法 实例计算 【实例1】 【实例2】 【实例3】 【实例4】&#xff1a;冒泡排序的时间复杂度 【实例5】&#xff1a;二分查找的时间复杂度 【实例6】&#xff1a;阶乘递归的时间复杂度 【实例7】&#xff1a;斐波那契…

独立游戏《星尘异变》UE5 C++程序开发日志5——实现物流系统

目录 一、进出口清单 二、路径计算 三、包裹 1.包裹的数据结构 2.包裹在场景中的运动 四、道路 1.道路的数据结构 2.道路的建造 3.道路的销毁 4.某个有道路连接的建筑被删除 作为一个工厂类模拟经营游戏&#xff0c;各个工厂之间的运输必不可少&#xff0c;本游戏采用的…

SQLite数据库在Android中的使用

目录 一&#xff0c;SQLite简介 二&#xff0c;SQLIte在Android中的使用 1&#xff0c;打开或者创建数据库 2&#xff0c;创建表 3&#xff0c;插入数据 4&#xff0c;删除数据 5&#xff0c;修改数据 6&#xff0c;查询数据 三&#xff0c;SQLiteOpenHelper类 四&…

学习008-02-01-05 Configure a One-to-Many Relationship(配置一对多关系)

Configure a One-to-Many Relationship&#xff08;配置一对多关系&#xff09; This lesson explains how to create a One-to-Many relationship between two entities and how XAF generates the UI for such a relationship. 本课介绍如何在两个实体之间创建一对多关系以及…

nginx高可用实例

什么是nginx高可用 为什么需要高可用 正常情况下使用nginx&#xff0c;浏览器访问网址到nginx服务器&#xff0c;nginx再发送到目标服务器&#xff0c;获取资源返回。 但是会有一个问题&#xff1a;当nginx进程发生宕机&#xff0c;此时目标服务器存在&#xff0c;但是浏览器访…

Vue入门之v-for、computed、生命周期和模板引用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Linux系统下U-Boot基本操作——UBoot基础知识

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

React基础学习-Day08

React基础学习-Day08 React生命周期&#xff08;旧&#xff09;&#xff08;新&#xff09;&#xff08;函数组件&#xff09; &#xff08;旧&#xff09; 在 React 16 版本之前&#xff0c;React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…

django报错(二):NotSupportedError:MySQL 8 or later is required (found 5.7.43)

执行python manage.py runserver命令时报版本不支持错误&#xff0c;显示“MySQL 8 or later is required (found 5.7.43)”。如图&#xff1a; 即要MySQL 8或更高版本。但是企业大所数用的还是mysql5.7相关版本。因为5.7之后的8.x版本是付费版本&#xff0c;贸然更新数据库肯定…

RK3562 NPU开发环境搭建

如何在Ubuntu系统&#xff08;PC&#xff09;上搭建RK3562 Buildroot Linux的NPU开发环境&#xff1f;即电脑端运行Ubuntu系统&#xff0c;而RK3562板卡运行Buildroot Linux系统的情况下&#xff0c;搭建RK3562 NPU开发环境。 下面是相应的步骤&#xff08;对应的命令&#xf…