“尝试对空对象引用调用虚拟方法'android.app.Activity. showdShowRequestPermissionRationa'"

bttbmeg0  于 2023-02-20  发布在  Android
关注(0)|答案(4)|浏览(164)

我尝试使用react-native-twilio-programmable-voice软件包整合Twilio语音。我的应用程序在ios上加载,但在android上运行时,我收到此错误消息
尝试对空对象引用screenshot here调用虚拟方法“boolean android.app.Activity.shouldShowRequestPermissionRationale”
我已经将<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;
}
czfnxgou

czfnxgou1#

我一直在使用同一个库来处理与React Native的集成。我感受到了尝试这种集成的痛苦,因为在这一过程中有很多小问题。我在让Android端处理权限时遇到了这个问题。
我发现权限可以通过React Native on Android来处理,我注解掉了Android上的权限调用,并切换到React Native实现,这对我很有效。
自从这个问题发布以来,已经有了很多更新,所以用户必须注意Twilio Voice for iOS(Pod)、Android和React Native Package 器之间使用的是什么版本。我最终分叉了库来控制合并的内容,因为每个方面都在积极开发中。

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)
  }
}

祝你好运!

wpx232ag

wpx232ag2#

我遇到了同样的问题,在详细检查代码后,我发现权限请求是在TwilioVoiceModule的构造函数中进行的,而当时ActivityCompat可能还没有初始化(顺便说一句,我是一名iOS开发人员,在Android上工作不多)。所以我创建了一个@ReactMethod来请求权限,并在进入调用屏幕后在ReactNative中调用该方法。
大概是这样的

@ReactMethod
    public void askForMicrophones() {
      if (!checkPermissionForMicrophone()) {
        requestPermissionForMicrophone();
      }
    }
pvabu6sv

pvabu6sv3#

我遇到了相同类型但略有不同的问题尝试在空对象引用上调用接口方法“expo.modules.interfaces.barcodescanner.BarCodeScannerInterface expo.modules.interfaces.barcodescanner.BarCodeScannerProviderInterface.createBarCodeDetectorWithContext(android.content.Context)”
将️expo-camera从12.1.0降级到12.0.3后,这个问题似乎不再出现。

jrcvhitl

jrcvhitl4#

我通过启动一个新的react原生项目来解决这个问题,因为这样可以保存寻找未知解决方案的所有压力

相关问题