Попытка вызвать виртуальный метод 'void com.twiliovoicereactnative.JSEventEmitter.setContext(com.facebook.react.bridge.ReactApplicationContext) по ссылке на нулевой объект
Официальный URL-адрес пакета https:// github.com/twilio/twilio-voice-react-native/tree/main
Я вставляю ниже MainApplication.kt, MainActivity.kt, MainReactNativeHost.ktMainApplication.KT
Код: Выделить всё
import android.app.Application
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactHost
import com.facebook.react.ReactNativeHost
import org.devio.rn.splashscreen.SplashScreenReactPackage
import com.intercom.reactnative.IntercomModule
import com.facebook.react.ReactPackage
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
import com.facebook.react.defaults.DefaultReactNativeHost
import com.facebook.soloader.SoLoader
import com.twiliovoicereactnative.VoiceApplicationProxy;
import com.facebook.FacebookSdk
import com.facebook.appevents.AppEventsLogger
import android.content.BroadcastReceiver
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import android.content.Context
class MainApplication : Application(), ReactApplication {
override val reactNativeHost: ReactNativeHost =
object : DefaultReactNativeHost(this) {
override fun getPackages(): List =
PackageList(this).packages.apply {
}
override fun getJSMainModuleName(): String = "index"
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
}
override val reactHost: ReactHost
get() = getDefaultReactHost(applicationContext, reactNativeHost)
private val mReactNativeHost = MainReactNativeHost(this)
private val voiceApplicationProxy = VoiceApplicationProxy(mReactNativeHost)
override fun registerReceiver(receiver: BroadcastReceiver?, filter: IntentFilter): Intent? {
return if (Build.VERSION.SDK_INT >= 34 && applicationInfo.targetSdkVersion >= 34) {
super.registerReceiver(receiver, filter, Context.RECEIVER_EXPORTED)
} else {
super.registerReceiver(receiver, filter)
}
}
override fun onCreate() {
super.onCreate()
FacebookSdk.sdkInitialize(applicationContext)
SoLoader.init(this, false)
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
load()
}
}
override fun onTerminate() {
voiceApplicationProxy.onTerminate()
super.onTerminate()
}
}
Код: Выделить всё
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
import com.facebook.react.defaults.DefaultReactActivityDelegate
import com.facebook.react.ReactRootView
import org.devio.rn.splashscreen.SplashScreen
import android.os.Bundle
import android.os.Build
import android.view.WindowManager
import com.twiliovoicereactnative.VoiceActivityProxy;
import android.widget.Toast;
import android.Manifest;
import android.content.Intent;
class MainActivity : ReactActivity() {
override fun getMainComponentName(): String = "appName"
private val activityProxy = VoiceActivityProxy(this) { permission ->
when {
Manifest.permission.RECORD_AUDIO == permission -> {
Toast.makeText(
this@MainActivity,
"Microphone permissions needed. Please allow in your application settings.",
Toast.LENGTH_LONG
).show()
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && Manifest.permission.BLUETOOTH_CONNECT == permission -> {
Toast.makeText(
this@MainActivity,
"Bluetooth permissions needed. Please allow in your application settings.",
Toast.LENGTH_LONG
).show()
}
Build.VERSION.SDK_INT > Build.VERSION_CODES.S_V2 && Manifest.permission.POST_NOTIFICATIONS == permission -> {
Toast.makeText(
this@MainActivity,
"Notification permissions needed. Please allow in your application settings.",
Toast.LENGTH_LONG
).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
SplashScreen.show(this)
super.onCreate(null)
activityProxy.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
}
window.addFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN or
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON or
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
)
}
override fun onDestroy() {
activityProxy.onDestroy()
super.onDestroy()
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
activityProxy.onNewIntent(intent)
}
}
Код: Выделить всё
import android.app.Application
import com.facebook.react.PackageList
import com.facebook.react.ReactPackage
import com.twiliovoicereactnative.VoiceApplicationProxy
class MainReactNativeHost(application: Application) : VoiceApplicationProxy.VoiceReactNativeHost(application) {
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
override fun getPackages(): List {
val packages = PackageList(this).packages
// Packages that cannot be autolinked yet can be added manually here
// packages.add(MyReactNativePackage())
return packages
}
override fun getJSMainModuleName(): String = "index"
}

Подробнее здесь: https://stackoverflow.com/questions/791 ... entemitter