Отсутствующий плугин вызовы нативного кода с помощью методаханала в firebase.onbackgroundmessageAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Отсутствующий плугин вызовы нативного кода с помощью методаханала в firebase.onbackgroundmessage

Сообщение Anonymous »

Я пытаюсь позвонить в нативный метод, когда в фоновом режиме появляется уведомление, но когда Флаттер пытается сделать вызов на собственном методе, я получаю эту ошибку:
ошибка

Код: Выделить всё

I/flutter (20709): Executing background
E/flutter (20709): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method triggerAlarm on channel com.channel/method)
E/flutter (20709): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:332:7)
E/flutter (20709): 
E/flutter (20709): #1      AlarmService.triggerAlarm (package:alarm_example/main.dart:49:7)
E/flutter (20709): 
Это мои файлы Kotlin для настройки метода:
sstrong> application.kt

Код: Выделить всё

class MyApplication : Application() {

override fun onCreate() {
super.onCreate()
initializeFlutterEngine()
}

private fun initializeFlutterEngine() {
// Create a new FlutterEngine instance
val flutterEngine = FlutterEngine(this)

flutterEngine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault()
)
// Cache the engine for later use
FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine)
}
}
mainactivity.kt

Код: Выделить всё

class MainActivity: FlutterActivity() {

private val METHOD_CHANNEL = "com.channel/method"
private val engineId = "my_engine_id"

override fun onCreate(savedInstanceState: Bundle?) {
Log.d("MainActivity", "Creating main activity")
super.onCreate(savedInstanceState)
FlutterEngineCache.getInstance().put(engineId, flutterEngine)

// Initialize and cache the FlutterEngine
// Get the cached FlutterEngine
val cachedEngine = FlutterEngineCache.getInstance().get(engineId)
if (cachedEngine != null) {
Log.d("MainActivity", "Using cached FlutterEngine $cachedEngine")
configureFlutterEngine(cachedEngine)
} else {
Log.e("MainActivity", "Cached FlutterEngine not found")
}
}

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
flutterEngine.plugins.add(AlarmPlugin())
}
}

alarmplugin.kt

Код: Выделить всё

class AlarmPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {

private lateinit var context: Context
private var methodChannel: MethodChannel? = null

// Instance variable for FlutterPluginBinding
private var flutterPluginBinding: FlutterPlugin.FlutterPluginBinding? = null

override fun onAttachedToEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
flutterPluginBinding = binding

if(methodChannel == null){
Log.d("PLUGIN", "Initializing flutter plugin first time")
// Init Flutter Plugin First Time Only
initPlugin(binding.binaryMessenger)
}
}

private fun initPlugin(binaryMessenger: BinaryMessenger) {
methodChannel = MethodChannel(binaryMessenger, "com.channel/method")
methodChannel?.setMethodCallHandler(this)
}

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
flutterPluginBinding?.binaryMessenger?.let {
Log.d("PLUGIN", "Reinitialize forcefully from MainIsolate")

// Reinitialize MethodChannel Forcefully from MainIsolate
initPlugin(it)
}
}

override fun onDetachedFromActivity() {
methodChannel = null
}

override fun onDetachedFromActivityForConfigChanges() {
// Handle configuration changes if needed
}

override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {}

override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
// Clean up resources when detached from engine
methodChannel = null
}

override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"triggerAlarm" ->  {
Log.d("PLUGIN", "Calling Alarm")

result.success("triggerAlarm done")
}
else -> {
result.notImplemented()
}
}
}
}
и вызов со стороны трепета

Код: Выделить всё

...

Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
print("Executing background");

static const MethodChannel _channel = MethodChannel('com.channel/method');

await _channel.invokeMethod('triggerAlarm');
}

Future main() async {
...

FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

...

runApp(const App());
}

...

Я пробовал Flutter Clean и восстановить APK, также обеспечил имя методов и каналов одинаково. Прямо сейчас я просто что -то записываю, когда метод запускается.

Код: Выделить всё

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel master, 3.23.0-13.0.pre.189, on Microsoft Windows [Versi¢n 10.0.22631.4317], locale es-ES)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Build Tools 2022 17.7.2)
[√] Android Studio (version 2022.2)
[√] VS Code (version 1.94.2)
[√] Connected device (4 available)
[√] Network resources

• No issues found!
Вопрос:
Как я могу убедиться, что мой родной метод настроен на канале, когда уведомление приходит в фоновом режиме? />https://medium.com/@kkgowtham/workaroun ... ge-handler

Подробнее здесь: https://stackoverflow.com/questions/791 ... base-onbac
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»