2016-10-07 2 views
1

직렬 포트 분쇄 시스템으로 애플리케이션을 만들었습니다. 그러나 나는 이것을 필요로한다. 직렬 데이터가 수신되면 응용 프로그램이 화면을 트리거하고 엽니 다.내 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> 
이다