1.需要在AndroidManifest.xml文件中添加权限
<uses-permission android:name="android.permission.USB_PERMISSION"/>
2.在MainActivity.java文件中更改
import android.os.Bundle;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbManager;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "myUsbBroReceiver";
private MethodChannel methodChannel;
private UsbBroadcastReceiver usbBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
usbBroadcastReceiver = new UsbBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
registerReceiver(usbBroadcastReceiver, filter);
}
@Override
public void configureFlutterEngine(FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
methodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(usbBroadcastReceiver);
}
private class UsbBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
methodChannel.invokeMethod("usbAttached", null);
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
methodChannel.invokeMethod("usbDetached", null);
}
}
}
}
接下来在main.dart文件中写一个简单的例子
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void initState() {
super.initState();
platform.setMethodCallHandler(_handleMethod);
}
static const platform = MethodChannel('myUsbBroReceiver');
Future<void> _handleMethod(MethodCall call) async {
switch (call.method) {
case 'usbAttached':
// 处理USB插入事件
setState(() {
_counter=888;
});
break;
case 'usbDetached':
// 处理USB拔出事件
setState(() {
_counter=111;
});
break;
default:
print('未知方法');
}
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
);
}
}
3.然后就大功告成了,可以打包在安卓设备上测试了!