Java Display Manager的Flatter和Android之间的事件通道
我正在尝试创建一个事件频道,以监听显示管理器的更改,我检查了android的文档,它在本机android上运行良好,下面是代码Java Display Manager的Flatter和Android之间的事件通道,java,android,flutter,dart,Java,Android,Flutter,Dart,我正在尝试创建一个事件频道,以监听显示管理器的更改,我检查了android的文档,它在本机android上运行良好,下面是代码 public class MainActivity extends AppCompatActivity implements DisplayManager.DisplayListener{ private TextView mirrorText; private DisplayManager mDisplayManager; @Overr
public class MainActivity extends AppCompatActivity implements DisplayManager.DisplayListener{
private TextView mirrorText;
private DisplayManager mDisplayManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mirrorText = findViewById(R.id.mirrorName);
mirrorText.setText("Mirroring");
mDisplayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
mDisplayManager.registerDisplayListener(MainActivity.this, null);
mDisplayManager.unregisterDisplayListener(MainActivity.this);
}
@Override
public void onDisplayAdded(int displayId) {
mirrorText.setText("An new Display added with ID " + displayId);
}
@Override
public void onDisplayRemoved(int displayId) {
mirrorText.setText("An Display has been removed with ID " + displayId);
}
@Override
public void onDisplayChanged(int displayId) {
mirrorText.setText("Display changed added with ID " + displayId);
}
}
public class MainActivity extends FlutterActivity implements DisplayManager.DisplayListener{
private static final String MIRROR_CHANNEL = "com.example.andro/mirror";
private int numberOfDiplay = 0;
private DisplayManager mDisplayManager;
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
mDisplayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
GeneratedPluginRegistrant.registerWith(flutterEngine);
new EventChannel(flutterEngine.getDartExecutor(), MIRROR_CHANNEL).setStreamHandler(
new StreamHandler() {
private BroadcastReceiver mirrorStateChangeReceiver;
@Override
public void onListen(Object arguments, EventSink events) {
mDisplayManager.registerDisplayListener(MainActivity.this, null);
mirrorStateChangeReceiver = createMirrorStateChangeReceiver(events);
}
@Override
public void onCancel(Object arguments) {
mDisplayManager.unregisterDisplayListener(MainActivity.this);
mirrorStateChangeReceiver = null;
}
}
);
}
private BroadcastReceiver createMirrorStateChangeReceiver(final EventSink events) {
return new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
events.success(numberOfDiplay);
}
};
}
@Override
public void onDisplayAdded(int displayId) {
numberOfDiplay = mDisplayManager.getDisplays().length;
}
@Override
public void onDisplayRemoved(int displayId) {
numberOfDiplay = mDisplayManager.getDisplays().length;
}
@Override
public void onDisplayChanged(int displayId) {
numberOfDiplay = mDisplayManager.getDisplays().length;
}
}
这段代码在android上运行良好,我进行了测试,并在屏幕上更新了文本。
现在在《颤栗》中,我创建了一个事件频道,但屏幕上没有任何更新,我不知道为什么
这是dart中的代码
class _PlatformMethodState extends State<PlatformMethod> {
static const EventChannel eventChannel = EventChannel('com.example.andro/charging');
String _screenMirror = 'Number of screens: ';
@override
void initState() {
super.initState();
mirrorChannel.receiveBroadcastStream().listen(_onScreenMirror, onError: _onScreenMirrorError);
}
void _onScreenMirror(Object event){
setState(() {
_screenMirror =
"Screen Number: $event.";
});
}
void _onScreenMirrorError(Object error) {
setState(() {
_screenMirror = 'Screen Number: unknown.';
});
}
@override
Widget build(BuildContext context) {
return Material(
child: Text(_screenMirror),
);
}
}