Как слушать данные последовательного порта 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 ответ
Для этого нет действия по умолчанию.
В вашем пользовательском приемнике получите порт и используйте его.
- Я использую решение mik3y и / или felHR85 для последовательного порта
Вот как это нравится;
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>