# Tutorial: 处理设备插拔

## 功能描述

本文主要介绍如何检测用户的设备插入、拔出、启动的行为。

## 实现流程

### 检测设备插入、拔出

    avdEngine.initDevice().then(function(result){
        avdEngine.addCallback(EngineCallback.device_camera_change, onCameraDeviceChangeHandle);
        avdEngine.addCallback(EngineCallback.device_microphone_change, onMicrophoneDeviceChangeHandle);
    }).otherwise(function(error){

    });

    /**
     * changeTypeEnum.add:插入; changeTypeEnum.remove:拔出
     */
    function onCameraDeviceChangeHandle(changeType, deviceIdList) {
    }

    function onMicrophoneDeviceChangeHandle(changeType, deviceIdList) {
        console.log:(`麦克风设备有${changeType == changeTypeEnum.add ? '新增' : '移除'}，请刷新设备！`);
    }

### 判断是否当前正在使用的设备被拔出

    avdEngine.initDevice().then(function(result){
        avdEngine.addCallback(EngineCallback.device_camera_change, onCameraDeviceChangeHandle);
        avdEngine.addCallback(EngineCallback.device_microphone_change, onMicrophoneDeviceChangeHandle);
    }).otherwise(function(error){

    });

    function onCameraDeviceChangeHandle(changeType, deviceIdList) {
        if(changeType == changeTypeEnum.remove){
            for(var key in deviceIdList) {
                var deviceId = deviceIdList[key];
                console.log("被拔出的摄像头ID:"+deviceId);
                var videos = room.selfUser.videos;
                for(var key1 in videos) {
                    var video = videos[key1];
                    if(video.status != StreamStatus.init && video.id == deviceId){
                        console.log("当前正在使用的摄像头设备被拔出,摄像头ID:"+deviceId);
                    }
                }
            }
        }
    }

    function onMicrophoneDeviceChangeHandle(changeType, deviceIdList) {
        if(changeType == changeTypeEnum.remove){
            for(var key in deviceIdList) {
                var deviceId = deviceIdList[key];
                console.log("被拔出的麦克风ID:"+deviceId);
                var audio = room.selfUser.audio;
                if(audio.status != StreamStatus.init && audio.id == deviceId){
                    console.log("当前正在使用的麦克风设备被拔出,麦克风ID:"+deviceId);
                }
            }
        }
    }

### 在用户插入新设备时，自动打开使用新设备。

    avdEngine.initDevice().then(function(result){
        avdEngine.addCallback(EngineCallback.device_camera_change, onCameraDeviceChangeHandle);
    }).otherwise(function(error){

    });

    function onCameraDeviceChangeHandle(changeType, deviceIdList) {
        if(changeType == changeTypeEnum.add){
            var deviceId = deviceIdList[0];
            var video = room.selfUser.getVideo(cameraId1);
            video.previewAndPublish(videoElement);
        }
    }