141 lines
4.5 KiB
Plaintext
141 lines
4.5 KiB
Plaintext
/*
|
||
* Copyright (c) 2022 NetEase, Inc. All rights reserved.
|
||
* Use of this source code is governed by a MIT license that can be
|
||
* found in the LICENSE file.
|
||
*
|
||
*/
|
||
|
||
import { BusinessError } from '@kit.BasicServicesKit';
|
||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||
import { camera, cameraPicker } from '@kit.CameraKit';
|
||
import { common } from '@kit.AbilityKit';
|
||
|
||
|
||
@CustomDialog
|
||
export struct NECameraSelectView {
|
||
controller?: CustomDialogController
|
||
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
|
||
context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
|
||
onImageChosen?: (url: string) => void
|
||
/// 从相册选择视频
|
||
onTakePhotoFromCamera?: () => void;
|
||
/// 通过相机拍摄视频
|
||
onTakeVideoFromCamera?: () => void;
|
||
|
||
aboutToAppear(): void {
|
||
// console.log("net ease start request permissions");
|
||
//this.requestPermissions(["ohos.permission.CAMERA", "ohos.permission.MICROPHONE", "ohos.permission.MEDIA_LOCATION",
|
||
// "ohos.permission.WRITE_MEDIA", "ohos.permission.READ_MEDIA"], this.context!);
|
||
}
|
||
|
||
// 显示相机选择器
|
||
async showCameraPicker() {
|
||
try {
|
||
// 相机选择器的配置信息
|
||
let pickerProfile: cameraPicker.PickerProfile = {
|
||
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK
|
||
};
|
||
|
||
// 相机选择器的媒体类型
|
||
let mediaTypes: cameraPicker.PickerMediaType[] = [
|
||
cameraPicker.PickerMediaType.PHOTO, // 拍照模式
|
||
cameraPicker.PickerMediaType.VIDEO,// 录制模式
|
||
]
|
||
|
||
let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(this.context, mediaTypes, pickerProfile);
|
||
if (this.onImageChosen && pickerResult.resultCode == 0 && pickerResult.resultUri.length > 0) {
|
||
this.onImageChosen(pickerResult.resultUri)
|
||
}
|
||
console.log("the pick pickerResult is:" + JSON.stringify(pickerResult));
|
||
} catch (error) {
|
||
let err = error as BusinessError;
|
||
console.error(`the pick call failed. error code: ${err.code}`);
|
||
}
|
||
}
|
||
|
||
// 显示相册选择器
|
||
async showPhotoPicker() {
|
||
console.log("net ease show photo picker");
|
||
const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
|
||
// 过滤选择媒体文件类型为IMAGE
|
||
photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
|
||
// 选择媒体文件的最大数目
|
||
photoSelectOptions.maxSelectNumber = 1;
|
||
|
||
const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
|
||
photoViewPicker.select(photoSelectOptions)
|
||
.then(async (photoSelectResult: photoAccessHelper.PhotoSelectResult) => {
|
||
if (this.onImageChosen && photoSelectResult.photoUris.length > 0) {
|
||
this.onImageChosen(photoSelectResult.photoUris[0])
|
||
}
|
||
console.info('net ease photoViewPicker.select to file succeed and uris are:' + photoSelectResult.photoUris);
|
||
}).catch((err: BusinessError) => {
|
||
console.error(`net ease Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
|
||
})
|
||
}
|
||
|
||
takePicture = () => {
|
||
if (this.onTakePhotoFromCamera) {
|
||
this.onTakePhotoFromCamera()
|
||
}
|
||
this.cancel()
|
||
}
|
||
takeVideo = () => {
|
||
if (this.onTakeVideoFromCamera) {
|
||
this.onTakeVideoFromCamera()
|
||
}
|
||
this.cancel()
|
||
}
|
||
cancel = () => {
|
||
this.controller?.close()
|
||
}
|
||
|
||
build() {
|
||
Column() {
|
||
Column() {
|
||
Text($r('app.string.chat_edit_take_picture'))
|
||
.fontSize(14)
|
||
.fontColor("#333333")
|
||
.textAlign(TextAlign.Center)
|
||
.height(42)
|
||
.width('100%')
|
||
.onClick(this.takePicture)
|
||
|
||
Row()
|
||
.height(1)
|
||
.width('100%')
|
||
.backgroundColor("#EFF1F4")
|
||
|
||
Text($r('app.string.chat_edit_toke_video'))
|
||
.fontSize(14)
|
||
.fontColor("#333333")
|
||
.textAlign(TextAlign.Center)
|
||
.height(42)
|
||
.width('100%')
|
||
.onClick(this.takeVideo)
|
||
}
|
||
.height(85)
|
||
.width('100%')
|
||
.backgroundColor(Color.White)
|
||
.borderRadius(12)
|
||
.margin({ left: 12, right: 12 })
|
||
|
||
Column() {
|
||
Text($r('app.string.mine_edit_cancel'))
|
||
.fontSize(14)
|
||
.fontColor("#333333")
|
||
.textAlign(TextAlign.Center)
|
||
.height(42)
|
||
.width('100%')
|
||
.onClick(this.cancel)
|
||
}
|
||
.height(42)
|
||
.width('100%')
|
||
.backgroundColor(Color.White)
|
||
.borderRadius(12)
|
||
.margin({ top: 10, left: 12, right: 12 })
|
||
|
||
}
|
||
.backgroundColor(Color.Transparent)
|
||
}
|
||
} |