Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从broadcastReceiver类调用颤振方法?_Android_Flutter_Dart_Background Service_Flutter Method Channel - Fatal编程技术网

Android 如何从broadcastReceiver类调用颤振方法?

Android 如何从broadcastReceiver类调用颤振方法?,android,flutter,dart,background-service,flutter-method-channel,Android,Flutter,Dart,Background Service,Flutter Method Channel,我正在尝试唤醒收到的呼叫的颤振方法。我已经做了接收部分,但我还不能唤醒颤振法 我尝试在MainActivity.kt类的onReceive()方法中调用方法channel,但它给出了错误。方法通道似乎只在onCreate()方法中起作用 问题是我如何在onReceive()中调用flatter方法,或者是否有其他方法可以做到这一点 MainActivity.kt import android.Manifest import android.content.BroadcastReceiver im

我正在尝试唤醒收到的呼叫的颤振方法。我已经做了接收部分,但我还不能唤醒颤振法

我尝试在MainActivity.kt类的onReceive()方法中调用方法channel,但它给出了错误。方法通道似乎只在onCreate()方法中起作用

问题是我如何在onReceive()中调用flatter方法,或者是否有其他方法可以做到这一点

MainActivity.kt

import android.Manifest
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant


class MainActivity: FlutterActivity(){


    var updateUIReciver: BroadcastReceiver? = null

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        GeneratedPluginRegistrant.registerWith(this)
        registerReceiver(broadcastReceiver,  IntentFilter("Service.to.activity"));

        val channel = "my.data"
        val methodChannel = MethodChannel(flutterView, channel)
        val map: HashMap<String, String> = HashMap()


        val permissionCheck: Int = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission granted ", Toast.LENGTH_LONG).show();

        } else {
            //TODO
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 4);
            Toast.makeText(this, "Permission not granted ", Toast.LENGTH_LONG).show();
        }

        methodChannel.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result? ->
            if (call.method == "callMyFunction") {
                methodChannel.invokeMethod("callMyFunction", map)

            } else {

            }
        }
    }

    var broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {

        override fun onReceive(context: Context, intent: Intent) {

            Toast.makeText(context, "Incoming call received", Toast.LENGTH_LONG).show()
// I can't call "methodChannel.invokeMethod("callMyFunction", map)" here cause of error.
        }
    }
}
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.telephony.PhoneStateListener
import android.telephony.TelephonyManager
import androidx.core.app.NotificationCompat
import android.app.NotificationManager;
import android.os.Build;
import android.os.IBinder;
import android.widget.Toast

class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {


        val telephony = context.getSystemService(Service.TELEPHONY_SERVICE) as TelephonyManager
        telephony.listen(object : PhoneStateListener() {
            override fun onCallStateChanged(state: Int, incomingNumber: String) {
                super.onCallStateChanged(state, incomingNumber)
                
                context.sendBroadcast(Intent("Service.to.activity"))


            }
        }, PhoneStateListener.LISTEN_CALL_STATE)
    }
}
颤振代码

 const platform = const MethodChannel('my.data');

  Future<void> _receiveFromNative(MethodCall call) async {
    try {
      if (call.method == "callMyFunction") {

        print("Received in flutter");
      }
    } on PlatformException catch (e) {}
  }

  platform.setMethodCallHandler(_receiveFromNative);
const platform=const MethodChannel('my.data');
Future\u receiveFromNative(MethodCall)异步{
试一试{
if(call.method==“callMyFunction”){
印刷品(“以颤振方式接收”);
}
}平台上异常捕获(e){}
}
platform.setMethodCallHandler(_receiveFromNative);