美文网首页
Flutter项目调取Android原生api

Flutter项目调取Android原生api

作者: Fantast_d2be | 来源:发表于2020-07-29 16:10 被阅读0次

项目链接https://github.com/CodeMonkeyLin/flutter_platform_channels

在客户端,MethodChannel (API)可以发送与方法调用相对应的消息。 在宿主平台上,MethodChannel 在Android((API) 和 FlutterMethodChannel iOS (API) 可以接收方法调用并返回结果。这些类允许您用很少的“脚手架”代码开发平台插件。

项目创建

创建java安卓平台的项目

flutter create -a java init_blue_tooth

Flutter Client

建立通道

import 'package:flutter/services.dart';

const platform = const MethodChannel('samples.flutter.dev');

'samples.flutter.dev'可理解为通道名称

调用原生api方法

await platform.invokeMethod('initBlueTooth');

initBlueTooth为在安卓客户端通过字符串标识符调用方法

Android Client

  1. 定位到您 Flutter app目录, 然后选择里面的 android文件夹
  2. 在java目录下打开 MainActivity.java
  3. 写一个自动打开蓝牙案例

引入需要的package

import io.flutter.plugin.common.MethodChannel;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.bluetooth.BluetoothAdapter;

增加MethodChannel调用函数

public class MainActivity extends FlutterActivity {
  private static final String CHANNEL = "samples.flutter.dev"; 
//与Flutter Client端写一致的方法
  private static final int REQUEST_ENABLE_BT = 1;

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
    
    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
        .setMethodCallHandler(
          (call, result) -> {
          //与Flutter Client invokeMethod调用字符串标识符匹配
            if(call.method.equals("initBlueTooth")){
                boolean isEnabled = initBlueTooth();
                //initBlueTooth为后面安卓端需要调取的方法
                result.success(isEnabled);
            }
            else {
              result.notImplemented();
            }
          }
        );
  }

configureFlutterEngine下写initBlueTooth方法,调用自动开启蓝牙

  private boolean initBlueTooth() {
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter == null) {
            return false;
        }

        if (!mBluetoothAdapter.isEnabled()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, REQUEST_ENABLE_BT);
            return false;
        }
        return true;
    }

}

在java同级目录打开AndroidManifest.xml增加蓝牙权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

调试

右键点击android文件选择Flutter > Open android module in android studio option.
解决在真机上装debug包的时候,提示Failur[INSTALL_FAILED_TEST_ONLY].
在gradle.properties 文件中添加

android.injected.testOnly=false

相关文章

网友评论

      本文标题:Flutter项目调取Android原生api

      本文链接:https://www.haomeiwen.com/subject/tfohrktx.html