feat: add expo-two-way-audio module to workspace
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import ExpoModulesCore
|
||||
import AVFoundation
|
||||
|
||||
let microphoneKey = "NSMicrophoneUsageDescription"
|
||||
|
||||
class MicrophonePermissionRequester: NSObject, EXPermissionsRequester {
|
||||
let mediaType: AVMediaType = .audio
|
||||
|
||||
static func permissionType() -> String {
|
||||
"microphone"
|
||||
}
|
||||
|
||||
func getPermissions() -> [AnyHashable: Any] {
|
||||
let systemStatus = AVAudioSession.sharedInstance().recordPermission
|
||||
var status: EXPermissionStatus
|
||||
|
||||
guard (Bundle.main.infoDictionary?["NSMicrophoneUsageDescription"]) != nil else {
|
||||
EXFatal(EXErrorWithMessage("""
|
||||
This app is missing NSMicrophoneUsageDescription, so audio services will fail.
|
||||
Add one of these keys to your bundle's Info.plist.
|
||||
"""))
|
||||
return ["status": EXPermissionStatusDenied]
|
||||
}
|
||||
|
||||
switch systemStatus {
|
||||
case .granted:
|
||||
status = EXPermissionStatusGranted
|
||||
case .denied:
|
||||
status = EXPermissionStatusDenied
|
||||
case .undetermined:
|
||||
status = EXPermissionStatusUndetermined
|
||||
@unknown default:
|
||||
status = EXPermissionStatusUndetermined
|
||||
}
|
||||
|
||||
return [
|
||||
"status": status.rawValue
|
||||
]
|
||||
}
|
||||
|
||||
func requestPermissions(resolver resolve: @escaping EXPromiseResolveBlock, rejecter reject: EXPromiseRejectBlock) {
|
||||
if #available(iOS 17.0, *) {
|
||||
AVAudioApplication.requestRecordPermission { _ in
|
||||
resolve(self.getPermissions())
|
||||
}
|
||||
} else {
|
||||
AVAudioSession.sharedInstance().requestRecordPermission { _ in
|
||||
resolve(self.getPermissions())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user