PickerHelper.ets 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import picker from '@ohos.file.picker';
  2. import { camera, cameraPicker } from '@kit.CameraKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. import { hilog } from '@kit.PerformanceAnalysisKit';
  6. import { photoAccessHelper } from '@kit.MediaLibraryKit';
  7. import { LogHelper } from './LogHelper';
  8. const DOCUMENT_DEFAULT_SELECT_NUMBER: number = 9; //数量
  9. export class PickerHelper {
  10. private constructor() {
  11. }
  12. /**
  13. * 调用系统相机,拍照、录视频
  14. * @param options
  15. * @returns
  16. */
  17. static async camera(options?: CameraOptions): Promise<string> {
  18. try {
  19. if (!options) {
  20. options = new CameraOptions();
  21. }
  22. if (!options.mediaTypes || options.mediaTypes.length == 0) {
  23. options.mediaTypes = [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO];
  24. }
  25. let pickerProfile: cameraPicker.PickerProfile = {
  26. cameraPosition: options.cameraPosition ? options.cameraPosition : camera.CameraPosition.CAMERA_POSITION_BACK,
  27. videoDuration: options.videoDuration,
  28. saveUri: options.saveUri
  29. };
  30. let context = getContext() as common.Context;
  31. let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(context,
  32. options.mediaTypes, pickerProfile);
  33. if (pickerResult && pickerResult.resultUri) {
  34. return pickerResult.resultUri;
  35. }
  36. } catch (err) {
  37. let error = err as BusinessError;
  38. hilog.error(0x0000, '=====>', `PickerHelper-camera-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  39. }
  40. return "";
  41. }
  42. /**
  43. * 通过选择模式拉起PhotoViewPicker界面,用户可以选择一个或多个图片/视频。
  44. * @param options
  45. * @returns
  46. */
  47. static async selectPhoto(options?: photoAccessHelper.PhotoSelectOptions): Promise<Array<string>> {
  48. try {
  49. if (!options) {
  50. options = new photoAccessHelper.PhotoSelectOptions();
  51. }
  52. if (!options.MIMEType) { //可选择的媒体文件类型,若无此参数,则默认为图片和视频类型。
  53. options.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
  54. }
  55. if (!options.maxSelectNumber) { //选择媒体文件数量的最大值,默认9
  56. options.maxSelectNumber = DOCUMENT_DEFAULT_SELECT_NUMBER;
  57. }
  58. let photoPicker = new photoAccessHelper.PhotoViewPicker();
  59. let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(options);
  60. LogHelper.error(JSON.stringify(photoSelectResult))
  61. if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) {
  62. return photoSelectResult.photoUris;
  63. } else {
  64. return [];
  65. }
  66. } catch (err) {
  67. let error = err as BusinessError;
  68. hilog.error(0x0000, '=====>',
  69. `PickerHelper-selectPhoto-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  70. return [];
  71. }
  72. }
  73. /**
  74. * 通过保存模式拉起photoPicker进行保存图片或视频资源的文件名,若无此参数,则默认需要用户自行输入
  75. * @param newFileNames
  76. */
  77. static async savePhoto(newFileNames?: Array<string>): Promise<Array<string>> {
  78. try {
  79. let photoPicker = new picker.PhotoViewPicker();
  80. if (newFileNames == undefined || newFileNames == null || newFileNames.length == 0) {
  81. let photoSaveResult = await photoPicker.save();
  82. if (photoSaveResult && photoSaveResult.length > 0) {
  83. return photoSaveResult;
  84. } else {
  85. return [];
  86. }
  87. } else {
  88. let PhotoSaveOptions = new picker.PhotoSaveOptions();
  89. PhotoSaveOptions.newFileNames = newFileNames;
  90. let photoSaveResult = await photoPicker.save(PhotoSaveOptions);
  91. if (photoSaveResult && photoSaveResult.length > 0) {
  92. return photoSaveResult;
  93. } else {
  94. return [];
  95. }
  96. }
  97. } catch (err) {
  98. let error = err as BusinessError;
  99. hilog.error(0x0000, '=====>', `PickerHelper-savePhoto-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  100. return [];
  101. }
  102. }
  103. /**
  104. * 通过选择模式拉起documentPicker界面,用户可以选择一个或多个文件。
  105. * @param options
  106. * @returns
  107. */
  108. static async selectDocument(options?: picker.DocumentSelectOptions): Promise<Array<string>> {
  109. try {
  110. if (!options) {
  111. options = new picker.DocumentSelectOptions();
  112. }
  113. if (!options.maxSelectNumber) { //选择媒体文件数量的最大值,默认9
  114. options.maxSelectNumber = DOCUMENT_DEFAULT_SELECT_NUMBER;
  115. }
  116. if (!options.selectMode) { //支持选择的资源类型,默认文件
  117. options.selectMode = picker.DocumentSelectMode.FILE;
  118. }
  119. let documentPicker = new picker.DocumentViewPicker();
  120. return await documentPicker.select(options);
  121. } catch (err) {
  122. let error = err as BusinessError;
  123. hilog.error(0x0000, '=====>',
  124. `PickerHelper-selectDocument-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  125. return [];
  126. }
  127. }
  128. /**
  129. * 通过保存模式拉起documentPicker界面,用户可以保存一个或多个文件。
  130. * @param options
  131. * @returns
  132. */
  133. static async saveDocument(newFileNames?: Array<string>): Promise<Array<string>> {
  134. try {
  135. let documentPicker = new picker.DocumentViewPicker();
  136. if (newFileNames == undefined || newFileNames == null || newFileNames.length == 0) {
  137. return await documentPicker.save();
  138. } else {
  139. let documentSaveOptions = new picker.DocumentSaveOptions();
  140. documentSaveOptions.newFileNames = newFileNames;
  141. return await documentPicker.save(documentSaveOptions);
  142. }
  143. } catch (err) {
  144. let error = err as BusinessError;
  145. hilog.error(0x0000, '=====>',
  146. `PickerHelper-saveDocument-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  147. return [];
  148. }
  149. }
  150. /**
  151. * 通过选择模式拉起audioPicker界面(目前拉起的是documentPicker,audioPicker在规划中),用户可以选择一个或多个音频文件。
  152. * @returns
  153. */
  154. static async selectAudio(options?: picker.AudioSelectOptions): Promise<Array<string>> {
  155. try {
  156. if (!options) {
  157. options = new picker.AudioSelectOptions();
  158. }
  159. if (!options.maxSelectNumber) { //选择媒体文件数量的最大值,默认9
  160. options.maxSelectNumber = DOCUMENT_DEFAULT_SELECT_NUMBER;
  161. }
  162. let audioPicker = new picker.AudioViewPicker();
  163. return await audioPicker.select(options);
  164. } catch (err) {
  165. let error = err as BusinessError;
  166. hilog.error(0x0000, '=====>',
  167. `PickerHelper-selectAudio-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  168. return [];
  169. }
  170. }
  171. /**
  172. * 通过保存模式拉起audioPicker界面(目前拉起的是documentPicker,audioPicker在规划中),用户可以保存一个或多个音频文件。
  173. * @param newFileNames
  174. * @returns
  175. */
  176. static async saveAudio(newFileNames?: Array<string>): Promise<Array<string>> {
  177. try {
  178. let audioPicker = new picker.AudioViewPicker();
  179. if (newFileNames == undefined || newFileNames == null || newFileNames.length == 0) {
  180. return await audioPicker.save();
  181. } else {
  182. let AudioSaveOptions = new picker.AudioSaveOptions();
  183. AudioSaveOptions.newFileNames = newFileNames;
  184. return await audioPicker.save(AudioSaveOptions);
  185. }
  186. } catch (err) {
  187. let error = err as BusinessError;
  188. hilog.error(0x0000, '=====>', `PickerHelper-saveAudio-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  189. return [];
  190. }
  191. }
  192. }
  193. /**
  194. * 相机参数类
  195. */
  196. export class CameraOptions {
  197. mediaTypes: Array<cameraPicker.PickerMediaType> =
  198. [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO]; //媒体类型。
  199. cameraPosition: camera.CameraPosition = camera.CameraPosition.CAMERA_POSITION_BACK; //相机的位置。
  200. saveUri?: string; //保存配置信息的uri。
  201. videoDuration?: number; //录制的最大时长。
  202. }