Ошибка
Код: Выделить всё
E/flutter (10616): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method sendSMS on channel channel_name)
E/flutter (10616): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:332:7)
E/flutter (10616):
E/flutter (10616): #1 SmsService.sendSms (package:muteify/services/sms_service.dart:8:30)
E/flutter (10616):
E/flutter (10616): #2 phoneStateBackgroundCallbackHandler (package:muteify/services/phone_state_bg_helper.dart:16:19)
E/flutter (10616):
Код: Выделить всё
import 'package:flutter/services.dart';
const platform = MethodChannel('channel_name');
class SmsService {
Future sendSms(String phone, String message) async {
try {
final String? result = await platform.invokeMethod('sendSMS', {
'phone': phone,
'message': message,
});
print("SMS result: $result");
return result;
} on PlatformException catch (e) {
return "Failed to send SMS: '${e.message}'.";
}
}
}
Код: Выделить всё
@file:Suppress("DEPRECATION")
package com.example.muteify
import android.telephony.SmsManager
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.Result
class MainActivity : FlutterActivity() {
private val channel = "channel_name"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, channel).setMethodCallHandler { call, result ->
if (call.method=="sendSMS"){
val customerPhone = call.argument("phone")
val customerMessage = call.argument("message")
if (customerPhone != null && customerMessage != null) {
sendSMS(customerPhone, customerMessage, result)
} else {
result.error("INVALID_ARGUMENT", "Phone number or message is null", null)
}
}
else {
result.notImplemented()
}
}
}
private fun sendSMS(phone: String, message: String, result: Result) {
return try {
val smsManager: SmsManager = SmsManager.getDefault()
smsManager.sendTextMessage(phone, null, message, null, null)
result.success("SMS sent successfully")
} catch (e: Exception) {
result.error("SMS_SEND_FAILED", "Failed to send SMS: ${e.message}", null)
}
}
}
Код: Выделить всё
- Очистил flutter и пересобрал APK. >
- Проверено, что имя канала совпадает между кодом Flutter и Android.
- Проверено, что MethodChannel настроен внутри configureFlutterEngine.
- Проверено на нескольких устройствах, ошибка по-прежнему возникает.
Приложение должно успешно отправить SMS через MethodChannel, даже если приложение работает в фоновом режиме, без возникновения ошибки MissingPluginException.
< h3>Доктор Флаттера:
Код: Выделить всё
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.24.3, on Pop!_OS 22.04 LTS
6.9.3-76060903-generic, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
[✓] Chrome - develop for the web
[✓] Linux toolchain - develop for Linux desktop
[✓] Android Studio (version 2024.1)
[✓] VS Code (version 1.93.1)
[✓] Connected device (3 available)
[✓] Network resources
• No issues found!
Что может быть причиной этого исключения MissingPluginException и как его устранить? Есть ли что-то, что я пропустил в настройке канала метода или настройке манифеста?
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-android