当前位置: 首页> 教育> 就业 > 郑州专业高校网站建设公司_厦门做网站软件_semaphore_重庆seo网络推广优化

郑州专业高校网站建设公司_厦门做网站软件_semaphore_重庆seo网络推广优化

时间:2025/8/22 14:46:55来源:https://blog.csdn.net/2302_79548774/article/details/146014253 浏览次数:0次
郑州专业高校网站建设公司_厦门做网站软件_semaphore_重庆seo网络推广优化

1。module.json5中配置相应的权限

    requestPermissions: [{"name": "ohos.permission.CAMERA","reason": "$string:permission_reason_camera","usedScene": {"abilities": ["EntryAbility"],"when": "inuse"}},{"name": 'ohos.permission.READ_MEDIA',"reason":"$string:permission_reason_IMG","usedScene": {}}],

2.src/main/resources/base/element/string.json配置提示说明

    {"name": "permission_reason_camera","value": "Used for scanning barcodes"},{"name": "permission_reason_IMG","value": "用于获取图库信息"}

3.ui部分

import { PhotoClass } from './utils/PhotoClass';@Entry
@Component
struct MyComponent {build() {Column() {Button('相机').onClick(async () => {const takePicture = await PhotoClass.requestCameraPermission() as stringif (takePicture) {console.log("拍照成功,URI: ", takePicture); // 打印成功情况} else {console.error("拍照失败,没有返回的图片 URI");}})Button('相册').onClick(async () => {try {const takePicture = await PhotoClass.photoAlbum(getContext()); // 使用 await 获取相册返回的结果console.log("访问相册成功,URI: ", takePicture); // 打印成功情况} catch (error) {console.error("访问相册过程中发生错误: ", error);}})}}
}

4.添加相应工具

  4-1:PhotoClass

import { camera, cameraPicker } from "@kit.CameraKit"
import { abilityAccessCtrl, common, Permissions } from "@kit.AbilityKit"
import { BusinessError } from "@kit.BasicServicesKit"
import { CustomDialogExampleTwo } from "./PhotoAuthorizationDialog";
import { permission } from "./Permission";export class PhotoClass {private static dialogControllerTwo: CustomDialogController | null = new CustomDialogController({builder: CustomDialogExampleTwo(),onWillDismiss: (dismissDialogAction: DismissDialogAction) => {console.info("reason=" + JSON.stringify(dismissDialogAction.reason));console.log("dialog onWillDismiss");if (dismissDialogAction.reason === DismissReason.PRESS_BACK ||dismissDialogAction.reason === DismissReason.TOUCH_OUTSIDE) {dismissDialogAction.dismiss();}},offset: { dx: 0, dy: -25 }});private static PermissionsData: Permissions[] = ['ohos.permission.READ_MEDIA'];private static context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;public static async startCameraPicker(context: Context): Promise<string | undefined> {try {const pickerProfile: cameraPicker.PickerProfile = {cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK};const pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(context,[cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO],pickerProfile);console.log("The picker result is: " + JSON.stringify(pickerResult));if (pickerResult.resultCode === 0) {const takePicture = pickerResult.resultUri;context.eventHub.emit("updateImage", pickerResult.resultUri);return takePicture}} catch (error) {const err = error as BusinessError;console.error(`The pick call failed. Error code: ${err.code}`);return undefined}return undefined}public static async photoAlbum(context: Context): Promise<string> {let url: string = '';const isAccess = await permission.checkAccess(PhotoClass.PermissionsData[0]);if (isAccess) {url = await permission.updateAvatar();} else {url = await permission.reqPermissionsFromUser(PhotoClass.PermissionsData, PhotoClass.context);}return url;}public static async reqPermissionsFromUser(): Promise<number[]> {const context = getContext() as common.UIAbilityContext;const atManager = abilityAccessCtrl.createAtManager();const grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']);return grantStatus.authResults;}public static async requestCameraPermission(): Promise<string | undefined> {const grantStatus = await PhotoClass.reqPermissionsFromUser();for (const status of grantStatus) {if (status === 0) {return await PhotoClass.startCameraPicker(PhotoClass.context);} else if (status === -1 && PhotoClass.dialogControllerTwo) {await PhotoClass.dialogControllerTwo.open();}}return undefined}
}

4-2:Permission

import { photoAccessHelper } from "@kit.MediaLibraryKit";
import { abilityAccessCtrl, bundleManager, common, Permissions, Want } from '@kit.AbilityKit';
import { BusinessError } from "@kit.BasicServicesKit";
import { promptAction } from "@kit.ArkUI";class Permission {private atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();private confirmConfig: promptAction.ShowDialogOptions = {title: "温馨提示",message: "未授权访问媒体资源无法打开相册,是否前往设置进行授权?",buttons: [{ text: '离开', color: '40vp' },{ text: '去授权', color: '#000' }]}// 检查是否授权async checkAccess(permissions: Permissions) {let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION |bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_METADATA;const ApplicationInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags)let tokenID: number = ApplicationInfo.appInfo.accessTokenId// permissions.forEach((item: Permissions) => {const data = await this.atManager.checkAccessToken(tokenID, permissions)if (data === 0) {return true} else {return false}}// 申请授权async reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext) {// 选中图片信息const data = await this.atManager.requestPermissionsFromUser(context, permissions)let grantStatus: Array<number> = data.authResults;if (grantStatus[0] === 0) {// 用户授权,可以继续访问目标操作const str = await this.updateAvatar()return str} else {// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限promptAction.showDialog(this.confirmConfig).then((confirm) => {if (confirm.index === 1) {this.openPermissionSetting(permissions)}})return ''}}// 打开权限设置async openPermissionSetting(permissions: Array<Permissions>) {let context: Context = getContext(this) as common.UIAbilityContext;this.atManager.requestPermissionOnSetting(context, permissions).then((data: Array<abilityAccessCtrl.GrantStatus>) => {if (data[0] === 0) {promptAction.showToast({ message: '授权成功' })} else {promptAction.showToast({ message: '授权失败,请重新授权' })}}).catch((err: BusinessError) => {console.log('openPermissionSettingErr', JSON.stringify(err))});}// 打开相册async updateAvatar() {// 1. 选择相册照片// 选择照片配置const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions()photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPEphotoSelectOptions.maxSelectNumber = 1// 选择照片对象const photoPicker = new photoAccessHelper.PhotoViewPicker()const photoResult = await photoPicker.select(photoSelectOptions)const uri = photoResult.photoUris[0]return uri}
}export const permission = new Permission()

4-3:PhotoAuthorizationDialog

import { common, Want } from "@kit.AbilityKit"@CustomDialog
export struct CustomDialogExampleTwo {controllerTwo?: CustomDialogControllerbuild() {Column() {Text('应用相机权限未开启,是否前往开启').fontSize(20).margin({ top: 45, bottom: 45 })Flex({ justifyContent: FlexAlign.SpaceAround }) {Button('取消').width('45%').onClick(() => {this.controllerTwo?.close()}).backgroundColor('#f4f4f4').fontColor(Color.Black)Button('前往').width('45%').onClick(() => {let context = getContext(this) as common.UIAbilityContext;let want: Want = {bundleName: 'com.huawei.hmos.settings', //设置应用bundleNameabilityName: 'com.huawei.hmos.settings.MainAbility', //设置应用abilityNameuri: "application_info_entry", //通知管理页面parameters: {pushParams: context.abilityInfo.bundleName}}context.startAbility(want)this.controllerTwo?.close()}).backgroundColor('#ff313b').fontColor(Color.White)}.margin({ bottom: 20 })}}
}

关键字:郑州专业高校网站建设公司_厦门做网站软件_semaphore_重庆seo网络推广优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: