要解决“被允许的相机和麦克风被阻止”事件监听器的问题,您可以按照以下步骤进行操作:
private static final int REQUEST_CAMERA_PERMISSION = 200;
private static final int REQUEST_MICROPHONE_PERMISSION = 201;
// 请求相机权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
// 请求麦克风权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_MICROPHONE_PERMISSION);
}
private CameraManager.AvailabilityCallback cameraAvailabilityCallback = new CameraManager.AvailabilityCallback() {
@Override
public void onCameraAvailable(@NonNull String cameraId) {
// 相机可用
}
@Override
public void onCameraUnavailable(@NonNull String cameraId) {
// 相机不可用
}
};
private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
// 麦克风可用
break;
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// 麦克风不可用
break;
}
}
};
// 注册相机和麦克风的监听器
private void registerListeners() {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
cameraManager.registerAvailabilityCallback(cameraAvailabilityCallback, null);
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
// 取消注册相机和麦克风的监听器
private void unregisterListeners() {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
cameraManager.unregisterAvailabilityCallback(cameraAvailabilityCallback);
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.abandonAudioFocus(audioFocusChangeListener);
}
onResume
和onPause
方法中:@Override
protected void onResume() {
super.onResume();
registerListeners();
}
@Override
protected void onPause() {
super.onPause();
unregisterListeners();
}
通过执行上述步骤,您应该能够检测到相机和麦克风的可用性,并在需要时采取相应的操作。
上一篇:被允许的字符正在进行百分比编码。
下一篇:被这个错误困扰了几天的解决方案