Как слушать данные последовательного порта Android в моем BroadcastReceiver

Я подал заявку с использованием систем связи через последовательный порт. Но мне это нужно. Когда последовательные данные получены, приложение запускается и открывает экран.

Я уже использую USB_DEVICE_ATTACHED, но мне нужно что-то вроде этого действия "USB_DATA_RECEIVED". Является ли это возможным?

XXX - это действие, которое мне нужно.

<receiver
        android:name=".receivers.SerialDataReceiver"
        android:enabled="true">

        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.XXX" />
        </intent-filter>
</receiver>

1 ответ

Для этого нет действия по умолчанию.

В вашем пользовательском приемнике получите порт и используйте его.

Вот как это нравится;

public class CustomBroadcastReceiver extends BroadcastReceiver {
public static final String BROADCAST = "arda.kaplan.android.action.broadcast";

@Override
public void onReceive(final Context context, Intent intent) {

        findDevices(context);
}




private void findDevices(final Context context) {

    UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);

    final List<UsbSerialDriver> drivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager);

    final List<UsbSerialPort> result = new ArrayList<>();

    for (final UsbSerialDriver driver : drivers) {

        final List<UsbSerialPort> ports = driver.getPorts();
        result.addAll(ports);
    }

    if (result.size() > 0) {

        UsbSerialPort usbSerialPort = result.get(0);

        UsbSerialDriver driver = usbSerialPort.getDriver();
        UsbDevice device = driver.getDevice();

        UsbDeviceConnection usbConnection = usbManager.openDevice(usbSerialPort.getDriver().getDevice());

        final UsbSerialDevice usbSerialDevice = UsbSerialDevice.createUsbSerialDevice(device, usbConnection);

        usbSerialDevice.open();
        usbSerialDevice.setBaudRate(9600);
        usbSerialDevice.setDataBits(UsbSerialInterface.DATA_BITS_8);
        usbSerialDevice.setStopBits(UsbSerialInterface.STOP_BITS_1);
        usbSerialDevice.setParity(UsbSerialInterface.PARITY_NONE);
        usbSerialDevice.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);


        usbSerialDevice.read(new UsbSerialInterface.UsbReadCallback() {

            @Override
            public void onReceivedData(final byte[] data) {

                Intent startAppIntent = new Intent(context, ComingFromBroadcastReceiverActivity.class);

                startAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                startAppIntent.putExtra(ComingFromBroadcastReceiverActivity.KEY, new String(data));

                context.startActivity(startAppIntent);
            }
        });

    } 
}

}

И этот код для регистрации кастомного получателя

Intent intent = new Intent(CustomBroadcastReceiver.BROADCAST);
Bundle extras = new Bundle();
sendBroadcast(intent);

И это налицо

<receiver android:name=".receivers.CustomBroadcastReceiver">
        <intent-filter>
            <action android:name="arda.kaplan.android.action.broadcast" />
        </intent-filter>
    </receiver>
Другие вопросы по тегам