我尝试使用react-native-twilio-programmable-voice包合并Twilio语音。我的应用程序在ios上加载,但在android上运行时我收到此错误消息
尝试调用虚方法' boolean android.app.Activity.shouldShowRequestPermissionRationale'在null 对象参考 screenshot here
我在<uses-permission android:name="android.permission.RECORD_AUDIO" />
AndroidManifest.xml
并且在进入应用程序的4或5个屏幕之前,不会调用任何与TwilioVoice相关的函数。
现在已经抓了几天,非常感谢任何帮助。
我的Twilio助手类的代码片段:
import TwilioVoice from 'react-native-twilio-programmable-voice';
import {Platform} from 'react-native';
import config from '../config/Config';
export default class Voip{
constructor(props) {
this.state = {
};
}
async setupDeviceWithToken(accessToken){
console.log('V32: setup device', accessToken);
TwilioVoice.addEventListener('deviceReady', () => this.deviceReadyHandler());
TwilioVoice.addEventListener('deviceNotReady', () => this.deviceNotReadyHandler());
TwilioVoice.addEventListener('connectionDidConnect', () => this.connectionDidConnectHandler());
TwilioVoice.addEventListener('connectionDidDisconnect', () => this.connectionDidDisconnectHandler());
if(Platform.OS === 'ios')
{
TwilioVoice.addEventListener('callRejected', this.callRejected());
} else if (Platform.OS === 'android')
{
TwilioVoice.addEventListener('deviceDidReceiveIncoming', this.deviceDidReceiveIncomingHandler());
}
var success;
try {
success = await TwilioVoice.initWithToken(accessToken);
console.log('V36: ', success);
//return success;
}
catch(err){
console.log('V40: ' ,err);
return err;
}
// if(Platform.OS === 'ios')
// {
try {
TwilioVoice.configureCallKit({
appName: 'VoipApp' // Required param
})
console.log('V50: ios success');
//return 'success';
}
catch (err) {
console.log('V54: ',err);
return err;
}
// }
return success;
}
答案 0 :(得分:0)
我一直在使用相同的库来处理与React Native的集成。尝试这种整合让我感到痛苦,因为沿途有很多打嗝。让Android方处理权限时,我遇到了这个问题。
我发现可以通过React Native on Android处理权限。我在Android上注释了权限调用并切换到React Native实现,这对我有用。
自此问题发布以来已有很多更新,因此用户必须注意在Twilio Voice for iOS(Pod),Android和React Native包装器之间使用的版本。我最终要求库控制合并的内容,因为每个方面都在积极开发中。
async function requestMicrophonePermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
{
'title': `${name} Microphone Permission`,
'message': `${name} needs access to your microphone
'so you can talk.`
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("Microphone permission granted")
} else {
console.log("Microphone permission denied")
}
} catch (err) {
console.warn(err)
}
}
祝你好运!
答案 1 :(得分:0)
我遇到了同样的问题,在详细检查了代码之后,我发现权限请求是在TwilioVoiceModule的构造函数中进行的,那时,ActivityCompat可能还没有被初始化(BTW,我是一个iOS开发人员,没有在Android上工作太多)。所以我创建了一个@ReactMethod,它要求权限,并在我到达调用屏幕后在ReactNative中调用该方法。
这样的事情:
@ReactMethod
public void askForMicrophones() {
if (!checkPermissionForMicrophone()) {
requestPermissionForMicrophone();
}
}