MissingPluginException при попытке использования настраиваемого EventChannel во флаттере - PullRequest
0 голосов
/ 12 июля 2020

Недавно я решил создать приложение flutter, у меня проблема только с одной вещью.

Я хотел создать собственный поток, чтобы обнаруживать отключение гарнитуры, чтобы остановить воспроизведение музыки c. это моя MainActivity.

package com.example.radio24

import android.content.BroadcastReceiver
import android.content.IntentFilter
import android.content.Context
import android.content.Intent
import android.media.AudioManager
import android.os.Bundle
import android.os.PersistableBundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.plugin.common.EventChannel

class MainActivity: FlutterActivity() {
    private val HEADPHONES_LISTENER_CHANNEL = "com.radioanime24.dev/headphones"
    lateinit var broadCastReceiver: BroadcastReceiver;
    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        EventChannel(flutterEngine?.dartExecutor?.binaryMessenger, HEADPHONES_LISTENER_CHANNEL).setStreamHandler(
                object: EventChannel.StreamHandler {
                    override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
                        broadCastReceiver = object : BroadcastReceiver() {
                            override fun onReceive(contxt: Context?, intent: Intent?) {
                                when (intent?.action) {
                                    AudioManager.ACTION_AUDIO_BECOMING_NOISY -> {
                                        events?.success("HEADPHONES_UNPLUGGED")
                                    }
                                }
                            }
                        }
                        val filter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)
                        registerReceiver(broadCastReceiver, filter);
                    }
                    override fun onCancel(arguments: Any?) {
                        unregisterReceiver(broadCastReceiver)
                    }
                }
        )
    }
}

В дротике я пытаюсь использовать этот поток с помощью:


    Stream headPhonesStateStream = EventChannel('com.radioanime24.dev/headphones').receiveBroadcastStream();
    headPhonesStateStream.listen((event) {
      if (event == 'HEADPHONES_UNPLUGGED') {
        if (AudioService.playbackState.playing) {
          AudioService.pause();
        }
      }
    });

Но я получаю сообщение об ошибке:

MissingPluginException(No implementation found for method listen on channel com.radioanime24.dev/headphones)

Как следует Я регистрирую канал событий, чтобы пропустить эту ошибку?

1 Ответ

0 голосов
/ 12 июля 2020

Я считаю, что вам следует переопределить метод onCreate(savedInstanceState: Bundle?) вместо onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) из Activity.

...