1

Everyone, please help me

My Flutter Plugin Java can't start Intent service from android native please tell me to fix I created a Flutter plugin to connect to my watch. I created a Method Chanel, run Android native SDK, and I want the flutter plugin to run in foreground service so that it can sync data on background, but I can't run Intents, method onAttachedToActivity not call, please help all of you to fix this problem. this error

E/MethodChannel#releep_watch_connect: Failed to handle method call
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Activity io.flutter.embedding.android.FlutterActivity.getActivity()' on a null object reference
        at com.achatsocial.releep_watch_connect.ReleepWatchConnectPlugin.onMethodCall(ReleepWatchConnectPlugin.java:130)
        at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
        at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84)
        at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:865)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:8051)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
public class ReleepWatchConnectPlugin
    implements FlutterPlugin, MethodCallHandler, EventChannel.StreamHandler, ActivityAware {
  /// The MethodChannel that will the communication between Flutter and native
  /// Android
  ///
  /// This local reference serves to register the plugin with the Flutter Engine
  /// and unregister it
  /// when the Flutter Engine is detached from the Activity
  private FlutterActivity activity;
  private MethodChannel channel;
  private EventChannel stream_chanel;

  private List<String> listVal = new ArrayList<>();
  private Gson gson = new Gson();

  private String[] permissionArray = new String[] {
      Manifest.permission.READ_EXTERNAL_STORAGE,
      Manifest.permission.ACCESS_COARSE_LOCATION,
      Manifest.permission.WRITE_EXTERNAL_STORAGE,
      Manifest.permission.READ_PHONE_STATE,
      Manifest.permission.ACCESS_FINE_LOCATION,
      Manifest.permission.READ_CONTACTS,
      Manifest.permission.WRITE_CONTACTS,
      Manifest.permission.CALL_PHONE
  };
  NotificationManager notificationManager;

  @Override
  public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {

    YCBTClient.initClient(flutterPluginBinding.getApplicationContext(), true);
    YCBTClient.registerBleStateChange(bleConnectResponse);
    YCBTClient.deviceToApp(toAppDataResponse);

    channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "releep_watch_connect");
    channel.setMethodCallHandler(this);
    stream_chanel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), "scan_releep_watch");
    stream_chanel.setStreamHandler(this);

    notificationManager = (NotificationManager) activity.getSystemService(NOTIFICATION_SERVICE);

    BinaryMessenger messenger = flutterPluginBinding.getBinaryMessenger();

  }

  @Override
  public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
    if (call.method.equals("syncHeartRate")) {
      ArrayList lists = new ArrayList();

      Intent intent = new Intent(activity.getActivity(), MyBleService.class);
      intent.putExtra("text", "Hello");
      activity.startService(intent);
      activity.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);

    }
  }

  private ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
      MyBleService.MyBinder myBinder = (MyBleService.MyBinder) iBinder;
      MyBleService myService = myBinder.getService();
      myService.setOnListenerCounter(new MyBleService.OnListenerCounter() {
        @Override
        public void onCountChange(int count) {
         // tvCount.setText("Count: " + count);
        }
      });
    }

    @Override
    public void onServiceDisconnected(ComponentName componentName) {
    }
  };

  @Override
  public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
    channel.setMethodCallHandler(null);
  }
  
  @Override
  public void onCancel(Object arguments) {

  }

  @Override
  public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
    activity = (FlutterActivity) binding.getActivity();
    boolean backBoolean = PermissionUtils.checkPermissionArray(activity, permissionArray, 3);
  }

  @Override
  public void onDetachedFromActivityForConfigChanges() {

  }

  @Override
  public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {

  }

  @Override
  public void onDetachedFromActivity() {

  }
}
  • This works for me. Check alireza easazade's [answer here](https://stackoverflow.com/questions/59887901/get-activity-reference-in-flutter-plugin) – Hijbullah Al Mahmud Jan 03 '23 at 06:29

0 Answers0