1e41f4b71Sopenharmony_ci# Device Input Management (ArkTS) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciBefore developing a camera application, you must create an independent camera object. The application invokes and controls the camera object to perform basic operations such as preview, photographing, and video recording. 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci## How to Develop 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ciRead [Camera](../../reference/apis-camera-kit/js-apis-camera.md) for the API reference. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci1. Import the camera module, which provides camera-related attributes and methods. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci ```ts 12e41f4b71Sopenharmony_ci import { camera } from '@kit.CameraKit'; 13e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 14e41f4b71Sopenharmony_ci import { common } from '@kit.AbilityKit'; 15e41f4b71Sopenharmony_ci ``` 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci2. Call [getCameraManager](../../reference/apis-camera-kit/js-apis-camera.md#cameragetcameramanager) to obtain a **CameraManager** object. 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci For details about how to obtain the context, see [Obtaining the Context of UIAbility](../../application-models/uiability-usage.md#obtaining-the-context-of-uiability). 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci ```ts 22e41f4b71Sopenharmony_ci function getCameraManager(context: common.BaseContext): camera.CameraManager { 23e41f4b71Sopenharmony_ci let cameraManager: camera.CameraManager = camera.getCameraManager(context); 24e41f4b71Sopenharmony_ci return cameraManager; 25e41f4b71Sopenharmony_ci } 26e41f4b71Sopenharmony_ci ``` 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci > **NOTE** 29e41f4b71Sopenharmony_ci > 30e41f4b71Sopenharmony_ci > If obtaining the object fails, the camera hardware may be occupied or unusable. If it is occupied, wait until it is released. 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci3. Call [getSupportedCameras](../../reference/apis-camera-kit/js-apis-camera.md#getsupportedcameras) in the **CameraManager** class to obtain the list of cameras supported by the current device. The list stores the IDs of all cameras supported. If the list is not empty, each ID in the list can be used to create an independent camera object. If the list is empty, no camera is available for the current device and subsequent operations cannot be performed. 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci ```ts 35e41f4b71Sopenharmony_ci function getCameraDevices(cameraManager: camera.CameraManager): Array<camera.CameraDevice> { 36e41f4b71Sopenharmony_ci let cameraArray: Array<camera.CameraDevice> = cameraManager.getSupportedCameras(); 37e41f4b71Sopenharmony_ci if (cameraArray != undefined && cameraArray.length > 0) { 38e41f4b71Sopenharmony_ci for (let index = 0; index < cameraArray.length; index++) { 39e41f4b71Sopenharmony_ci console.info('cameraId : ' + cameraArray[index].cameraId); // Obtain the camera ID. 40e41f4b71Sopenharmony_ci console.info('cameraPosition : ' + cameraArray[index].cameraPosition); // Obtain the camera position. 41e41f4b71Sopenharmony_ci console.info('cameraType : ' + cameraArray[index].cameraType); // Obtain the camera type. 42e41f4b71Sopenharmony_ci console.info('connectionType : ' + cameraArray[index].connectionType); // Obtain the camera connection type. 43e41f4b71Sopenharmony_ci } 44e41f4b71Sopenharmony_ci return cameraArray; 45e41f4b71Sopenharmony_ci } else { 46e41f4b71Sopenharmony_ci console.error("cameraManager.getSupportedCameras error"); 47e41f4b71Sopenharmony_ci return []; 48e41f4b71Sopenharmony_ci } 49e41f4b71Sopenharmony_ci } 50e41f4b71Sopenharmony_ci ``` 51e41f4b71Sopenharmony_ci 52e41f4b71Sopenharmony_ci4. Call [getSupportedOutputCapability](../../reference/apis-camera-kit/js-apis-camera.md#getsupportedoutputcapability11) to obtain all output streams supported by the current device, such as preview streams and photo streams. The output streams supported are the value of each **profile** field under [CameraOutputCapability](../../reference/apis-camera-kit/js-apis-camera.md#cameraoutputcapability). 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci ```ts 55e41f4b71Sopenharmony_ci async function getSupportedOutputCapability(cameraDevice: camera.CameraDevice, cameraManager: camera.CameraManager, sceneMode: camera.SceneMode): Promise<camera.CameraOutputCapability | undefined> { 56e41f4b71Sopenharmony_ci // Create a camera input stream. 57e41f4b71Sopenharmony_ci let cameraInput: camera.CameraInput | undefined = undefined; 58e41f4b71Sopenharmony_ci try { 59e41f4b71Sopenharmony_ci cameraInput = cameraManager.createCameraInput(cameraDevice); 60e41f4b71Sopenharmony_ci } catch (error) { 61e41f4b71Sopenharmony_ci let err = error as BusinessError; 62e41f4b71Sopenharmony_ci console.error('Failed to createCameraInput errorCode = ' + err.code); 63e41f4b71Sopenharmony_ci } 64e41f4b71Sopenharmony_ci if (cameraInput === undefined) { 65e41f4b71Sopenharmony_ci return undefined; 66e41f4b71Sopenharmony_ci } 67e41f4b71Sopenharmony_ci // Listen for camera input errors. 68e41f4b71Sopenharmony_ci cameraInput.on('error', cameraDevice, (error: BusinessError) => { 69e41f4b71Sopenharmony_ci console.error(`Camera input error code: ${error.code}`); 70e41f4b71Sopenharmony_ci }); 71e41f4b71Sopenharmony_ci // Open the camera. 72e41f4b71Sopenharmony_ci await cameraInput.open(); 73e41f4b71Sopenharmony_ci // Obtain the output streams supported by the camera. 74e41f4b71Sopenharmony_ci let cameraOutputCapability: camera.CameraOutputCapability = cameraManager.getSupportedOutputCapability(cameraDevice, sceneMode); 75e41f4b71Sopenharmony_ci if (!cameraOutputCapability) { 76e41f4b71Sopenharmony_ci console.error("cameraManager.getSupportedOutputCapability error"); 77e41f4b71Sopenharmony_ci return undefined; 78e41f4b71Sopenharmony_ci } 79e41f4b71Sopenharmony_ci console.info("outputCapability: " + JSON.stringify(cameraOutputCapability)); 80e41f4b71Sopenharmony_ci return cameraOutputCapability; 81e41f4b71Sopenharmony_ci } 82e41f4b71Sopenharmony_ci ``` 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci## Status Listening 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ciDuring camera application development, you can listen for the camera status, including the appearance of a new camera, removal of a camera, and availability of a camera. The camera ID and camera status are included in the callback function. When a new camera appears, the new camera can be added to the supported camera list. 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ci Register the **'cameraStatus'** event and return the listening result through a callback, which carries the **CameraStatusInfo** parameter. For details about the parameter, see [CameraStatusInfo](../../reference/apis-camera-kit/js-apis-camera.md#camerastatusinfo). 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci```ts 92e41f4b71Sopenharmony_cifunction onCameraStatus(cameraManager: camera.CameraManager): void { 93e41f4b71Sopenharmony_ci cameraManager.on('cameraStatus', (err: BusinessError, cameraStatusInfo: camera.CameraStatusInfo) => { 94e41f4b71Sopenharmony_ci if (err !== undefined && err.code !== 0) { 95e41f4b71Sopenharmony_ci console.error(`Callback Error, errorCode: ${err.code}`); 96e41f4b71Sopenharmony_ci return; 97e41f4b71Sopenharmony_ci } 98e41f4b71Sopenharmony_ci console.info(`camera: ${cameraStatusInfo.camera.cameraId}`); 99e41f4b71Sopenharmony_ci console.info(`status: ${cameraStatusInfo.status}`); 100e41f4b71Sopenharmony_ci }); 101e41f4b71Sopenharmony_ci} 102e41f4b71Sopenharmony_ci``` 103