datalogic / android-samples-astudio

Sample apps for Datalogic Android SDK
9 stars 39 forks source link

The broadcast receiver doesn't work #15

Open KalaliEhsan opened 1 year ago

KalaliEhsan commented 1 year ago

I want to use a flutter app on datalogic pda device. I use the receiver to get the barcode that is scanned. But doesn't work receiver.


public class MainActivity extends FlutterActivity {
    private final String ACTION_BROADCAST_RECEIVER = "com.datalogic.decodewedge.decode_action";
    private final String CATEGORY_BROADCAST_RECEIVER = "com.datalogic.decodewedge.decode_category";
    private final String EXTRA_DATA_STRING = "com.datalogic.decode.intentwedge.barcode_string";
    private final String EVENT_CHANNEL_BARCODE_INTENT = "app.channel.event.barcode_intent";
    private BroadcastReceiver receiver;
    private IntentFilter filter;

    public void configureFlutterEngine(@NotNull FlutterEngine flutterEngine) {
        Intrinsics.checkNotNullParameter(flutterEngine, "flutterEngine");
        GeneratedPluginRegistrant.registerWith(flutterEngine);
        DartExecutor dartExecutor = flutterEngine.getDartExecutor();
        Intrinsics.checkNotNullExpressionValue(dartExecutor, "flutterEngine.dartExecutor");
        new EventChannel(dartExecutor.getBinaryMessenger(), this.EVENT_CHANNEL_BARCODE_INTENT)
                .setStreamHandler(new EventChannel.StreamHandler() {
                    public void onListen(@Nullable Object args, @Nullable EventChannel.EventSink events) {
                        receiver = barcodeIntentReceiver(events);
                        filter = new IntentFilter();
                        Intrinsics.checkNotNull(filter);
                        filter.addAction(ACTION_BROADCAST_RECEIVER);
                        Intrinsics.checkNotNull(filter);
                        filter.addCategory(CATEGORY_BROADCAST_RECEIVER);
                        registerReceiver(receiver, filter);
                    }

                    public void onCancel(@NotNull Object args) {
                        Intrinsics.checkNotNullParameter(args, "args");
                    }
                });
    }

    private final BroadcastReceiver barcodeIntentReceiver(final EventChannel.EventSink events) {
        return new BroadcastReceiver() {
            public void onReceive(@Nullable Context context, @Nullable Intent wedgeIntent) {
                Intrinsics.checkNotNull(wedgeIntent);
                String action = wedgeIntent.getAction();
                if (Intrinsics.areEqual(action, ACTION_BROADCAST_RECEIVER)) {
                    String barcode_text = wedgeIntent.getStringExtra(EXTRA_DATA_STRING);
                    if (events != null) {
                        events.success(barcode_text);
                    }
                }
            }
        };
    }
}

How to resolve it?