当前位置: 首页 > article >正文

鸿蒙HarmonyOS开发:系统服务(拨打电话、网络搜索、联系人、位置服务、拉起弹框请求用户授权)

文章目录

      • 一、拨打电话
      • 二、网络搜索
      • 三、联系人
      • 四、位置服务
      • 五、拉起弹框请求用户授权

一、拨打电话

call.makeCall
跳转到拨号界面,并显示待拨出的号码。使用callback异步回调。

makeCall(phoneNumber: string, callback: AsyncCallback<void>): void
import { call } from '@kit.TelephonyKit';

import { BusinessError } from '@kit.BasicServicesKit';

call.makeCall("138xxxxxxxx", (err: BusinessError) => {
    if (err) {
        console.error(`makeCall fail, err->${JSON.stringify(err)}`);
    } else {
        console.log(`makeCall success`);
    }
});
import { BusinessError } from '@kit.BasicServicesKit';

call.makeCall("138xxxxxxxx").then(() => {
    console.log(`makeCall success`);
}).catch((err: BusinessError) => {
    console.error(`makeCall fail, promise: err->${JSON.stringify(err)}`);
});

二、网络搜索

需要权限:ohos.permission.GET_NETWORK_INFO

import { radio } from '@kit.TelephonyKit';
radio.getSignalInformationSync

获取指定SIM卡槽对应的注册网络信号强度信息列表。
卡槽ID。

  • 0:卡槽1
  • 1:卡槽2
let slotId: number = 0;
let signalInfo: Array<radio.SignalInformation> = radio.getSignalInformationSync(slotId);
console.log(`signal information size is:` + signalInfo.length);

三、联系人

提供联系人管理能力,包括添加联系人、删除联系人、更新联系人等。

import { contact } from '@kit.ContactsKit';

需要权限:ohos.permission.WRITE_CONTACTS

添加联系人,使用Promise方式作为异步方法。

addContact(context: Context, contact: Contact): Promise<number>
  import { BusinessError } from '@kit.BasicServicesKit';
  // 获取context
  let context = getContext(this) as Context;
  let promise = contact.addContact(
    context,
    {name: {fullName: 'xxx'},
      phoneNumbers: [{phoneNumber: '138xxxxxxxx'}]
  });
  promise.then((data) => {
    console.log(`addContact success: data->${JSON.stringify(data)}`);
  }).catch((err: BusinessError) => {
    console.error(`addContact fail: err->${JSON.stringify(err)}`);
  });

删除联系人,使用Promise方式作为异步方法。

deleteContact(context: Context, key: string): Promise<void>
import { BusinessError } from '@kit.BasicServicesKit';
// 获取context
let context = getContext(this) as Context;
let promise = contact.deleteContact(context, 'xxx');
promise.then(() => {
    console.log(`deleteContact success`);
}).catch((err: BusinessError) => {
    console.error(`deleteContact fail: err->${JSON.stringify(err)}`);
});

四、位置服务

import { geoLocationManager } from '@kit.LocationKit';

获取当前位置,使用Promise异步回调。

getCurrentLocation(request?: CurrentLocationRequest | SingleLocationRequest): Promise<Location>

调用逆地理编码服务,将坐标转换为地理描述,使用Promise异步回调。

getAddressesFromLocation(request: ReverseGeoCodeRequest): Promise<Array<GeoAddress>>;
import { geoLocationManager } from '@kit.LocationKit';
import { BusinessError } from '@kit.BasicServicesKit'
let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
try {
    geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then((data) => {
        console.log('getAddressesFromLocation: ' + JSON.stringify(data));
    })
    .catch((error:BusinessError) => {
        console.error('promise, getAddressesFromLocation: error=' + JSON.stringify(error));
    });
} catch (err) {
    console.error("errCode:" + JSON.stringify(err));
}

获取上一次位置。

import { geoLocationManager } from '@kit.LocationKit';
try {
    let location = geoLocationManager.getLastLocation();
} catch (err) {
    console.error("errCode:" + JSON.stringify(err));
}

监听位置

async aboutToAppear(){
 let status = await this.reqPermissionsFromUser(["ohos.permission.LOCATION","ohos.permission.APPROXIMATELY_LOCATION"])
if(status){
geoLocationManager.on("locationChange",{
priority:LocationRequestScenario.NAVIGATION,
timeInterval:1
},value=>{
console.log(JSON.stringify(value))
})
}
}

取消监听

aboutToDisappear(){
geoLocationManager.off("locationChange")
}

五、拉起弹框请求用户授权

requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>): Promise<PermissionRequestResult>

用于UIAbility拉起弹框请求用户授权。使用promise异步回调。

如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。

import abilityAccessCtrl, { Context, PermissionRequestResult } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']).then((data: PermissionRequestResult) => {
  console.info('data:' + JSON.stringify(data));
  console.info('data permissions:' + data.permissions);
  console.info('data authResults:' + data.authResults);
  console.info('data dialogShownResults:' + data.dialogShownResults);
}).catch((err: BusinessError) => {
  console.error('data:' + JSON.stringify(err));
});

在这里插入图片描述


http://www.kler.cn/a/464445.html

相关文章:

  • Conda 安装 Jupyter Notebook
  • docker中使用Volume完成数据共享
  • 前端-计算机网络篇
  • 二、CSS基础
  • ubuntu支持ssh
  • React 数据是怎样传递的
  • OpenCV报错:应用程序无法正常启动0xc000007b
  • Hack The Box-Starting Point系列Responder
  • CSS列表、表格、鼠标、滤镜样式设置
  • 深入理解 C 语言预处理:从源文件到可执行程序的关键步骤
  • Vue3实战教程》24:Vue3自定义指令
  • linux下安装达梦数据库v8详解
  • 通过Dockerfile来实现项目可以指定读取不同环境的yml包
  • 24.Java 新特性扩展(重复注解、类型注解)
  • Docker隔离及资源限制原理
  • 参观华为-拓宽全球视野
  • ip属地是看运营商吗还是手机
  • 【C语言 采集数据 精简排序】
  • 数字化转型 · OCR 技术如何打破效率瓶颈?
  • SpringMVC(六)拦截器
  • 栈及栈的操作
  • 【three.js】材质(Material)
  • 《探寻真正开源的大模型:开启AI创新新纪元》
  • 5.微服务灰度发布落地实践(rocketmq增强)
  • Win11电脑Cursor默认打开markdown文件,如何修改markdown文件默认打开方式为Typora?
  • (四)配置有线网口、SSH登陆、文件传输以及运行交叉编译程序测试