最近做Qt跨平台项目,实现im语音功能,用QAudioRecorder类去实现,windows上还好说。但到了mac就不容易了,macOS系统自10.14之后需要对麦克风、摄像头等进行授权才能使用,代码调用时需要去判断是否授权。
简单 的几步搞定:
第一步:在用到oc 代码的项目文件(.pro)中加入以下代码:
macx: LIBS += -framework Foundation
macx: LIBS += -framework AVFoundation
macx: QMAKE_CXXFLAGS += -x objective-c++
macx: OBJECTIVE_SOURCES += getMicrophone.mm //oc代码文件,功能实现文件
HEADERS += \
getMicrophone.h \ //接口声明文件
注意:getMicrophone.mm不能加在
SOURCES += \
下,否则编译是会报错的,因为.mm是oc的源文件。
第二步:定义接口;getMicrophone.h 内容如下:
#ifndef GETMICROPHONE_H
#define GETMICROPHONE_
typedef void(*comannHander)(bool granted);
int isMicrophoneAuthorization(comannHander comandhander);
#endif // GETMICROPHONE_H
第三步:实现接口,在getMicrophone.mm文件中:
int isMicrophoneAuthorization(comannHander comandhander)
{
qDebug()<<"isMicrophoneAuthorization--start";
int flag = [PrivacyAuthorizer authorMicphone];
if(flag == 3)
{
[PrivacyAuthorizer requestAuthorMicphone:^(BOOL granted) {
comandhander(granted);
}];
}
qDebug()<<"isMicrophoneAuthorization--flag--"<<flag;
return flag;
}
注意:.mm文件中是可以同时使用C++和OC的,PrivacyAuthorizer是我自己封装的oc的类
另外由于授权判断是异步返回的,因此设置了全局回调函数。具体参考代码。