Приемник широковещательной передачи, зарегистрированный для ACTION_USB_DEVICE_DETACHED, работает нормально, но то же самое не работает для ACTION_USB_DEVICE_ATTACHED. Дело в том, что onReceive() не вызывается, когда запущено намерение ACTION_USB_DEVICE_ATTACHED.Радиовещательный приемник зарегистрирован динамически (через Activity), не работает для ACTION_USB_DEVICE_ATTACHED
Вот мой код, где я зарегистрировать приемники в OnCreate()
registerReceiver(mUsbDeviceReceiver, new IntentFilter(
UsbManager.ACTION_USB_DEVICE_DETACHED));
registerReceiver(mUsbDeviceReceiver, new IntentFilter(
UsbManager.ACTION_USB_DEVICE_ATTACHED));
Вот код для класса BroadcastReceiver:
private final BroadcastReceiver mUsbDeviceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getBaseContext(), "onRecieve", Toast.LENGTH_SHORT).show();
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
device = (UsbDevice) intent
.getParcelableExtra(UsbManager.EXTRA_DEVICE);
Toast.makeText(
SUSB_Serial.this,
"ACTION_USB_DEVICE_ATTACHED:", Toast.LENGTH_LONG)
.show();
Log.d("dj", "USB attached");
connectUsb();
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
try{
UsbDevice tempDevice = (UsbDevice) intent
.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if(tempDevice != null){
if(tempDevice.getProductId() == device.getProductId()
&& tempDevice.getVendorId() == device.getVendorId()){
Toast.makeText(SUSB_Serial.this,
"ACTION_USB_DEVICE_DETACHED:",
Toast.LENGTH_LONG).show();
Log.d("dj", "USB detached");
AlertDialog dialog = null;
AlertDialog.Builder builder = new AlertDialog.Builder(SUSB_Serial.this);
builder.setMessage("Data reading failed, connect back the devices to continue").setTitle("Device Detached!!").
setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog = builder.create();
dialog.show();
Log.d("dj", "Releasing resources of USB");
releaseUsb();
}
}
}catch(Exception ex){
Log.d("dj", "Missing device reference");
ex.printStackTrace();
}
}
}
};