Я использую Arduino для получения данных с машин и отправки их в приложение для Android. Мое приложение запускается, когда устройство включено (устройство с одним приложением). Я хотел бы начать получать и обрабатывать данные, полученные от Arduino, когда приложение запускается, и не останавливаться, даже если пользователь находится в другой деятельности.
Я иду по пути создания объекта из класса BroadcastReceiver, но не уверен, является ли это наиболее подходящим решением, потому что, если моя MainActivity завершится, объект завершится сам.
AndroidManifest:
<receiver android:name="com.myapp.producao.ArduinoBroadcastReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
</intent-filter>
</receiver>
ArduinoBroadcastReceiver:
public class ArduinoBroadcastReceiver extends BroadcastReceiver {
long new_signal;
long last_signal = System.currentTimeMillis();
long countCycle;
private String TAG = this.getClass().toString();
private static final String ACTION_USB_PERMISSION = "com.myapp.producao.USB_PERMISSION";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d(TAG, "Started");
Log.d(TAG, context.toString());
Log.d(TAG, intent.toString());
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
Log.d(TAG, "VendorID: " + device.getVendorId());
Log.d(TAG, "DeviceName: " + device.getDeviceName());
Log.d(TAG, "ProductID: " + device.getProductId());
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
UsbManager UsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
UsbDeviceConnection connection = UsbManager.openDevice(device);
UsbSerialDevice serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection);
if (serialPort != null) {
if (serialPort.open()) {
serialPort.setBaudRate(9600);
serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);
serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1);
serialPort.setParity(UsbSerialInterface.PARITY_NONE);
serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);
serialPort.read(datareceived);
Log.d(TAG, "Ciclo");
} else {
Log.d(TAG, "PORT NOT OPEN");
}
} else {
Log.d(TAG, "PORT IS NULL");
}
} else {
Log.d(TAG, "PERM NOT GRANTED");
}
}
}
} else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
Log.d(TAG, "Attached");
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
Log.d(TAG, "Detached");
if (device != null) {
}
}
UsbSerialInterface.UsbReadCallback datareceived = new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] arg0) {
String data = new String(arg0, StandardCharsets.UTF_8);
int pino = Integer.parseInt(data.substring(1,2));
int estado = Integer.parseInt(data.substring(2,3));
handleResult(pino, estado);
}
};
}
Возможно, я путаюсь с классом или с тем, как и когда создавать этот объект и поддерживать его в течение всего времени работы приложения.
Есть идеи?