2016-10-07 5 views
1

Я сделал приложение с системами последовательного порта. Но мне это нужно. При получении последовательных данных приложение запускает и открывает экран.как слушать данные последовательного порта 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> 

ответ

0

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

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

  • Я использую 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>