Así que tienen una actividad en una aplicación que se inicia un servicio:Cómo pasar un contexto de actividad en una aplicación a un servicio en una otra aplicación
private void startService() {
if (started) {
Toast.makeText(Main.this, "Service already started",
Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent();
i.setClassName("com.enorbitas.daemon.service",
"com.enorbitas.daemon.service.DaemonService");
startService(i);
started = true;
updateServiceStatus();
Log.d(getClass().getSimpleName(), "startService()");
}
}
La actividad se puso en marcha por la siguiente intención:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
El servicio realiza el registro y se conecta con este dispositivo usb personalizado. Para hacer eso, necesita el contexto de actividad:
mUsbManager = (UsbManager) parent.getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
}
Intent intent = parent.getIntent();
String action = intent.getAction();
UsbDevice device = (UsbDevice) intent
.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
setDevice(device);
Log.i(TAG, "usb conectado");
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
if (mDevice != null && mDevice.equals(device)) {
setDevice(null);
Log.i(TAG, "usb NO conectado");
}
}
principal sería la actividad que inicia el servicio. Este enfoque solía funcionar porque ese código solía estar en la misma aplicación, pero ahora quiero que sea un servicio para que otras aplicaciones puedan conectarse a él.
¿Hay alguna manera de pasar el contexto de la actividad al servicio? Leí mucho sobre intents y bundles, parcelable y serialización, pero nada de eso me funciona. Necesito pasar el contexto.
¿Alguna idea?
Sí, lo sé. Pero el problema es que cuando obtengo la intención del padre para obtener el .getParcelableExtra y solicito el dispositivo, devuelve nulo. Para mí eso sucede porque el intento de capturar el archivo adjunto USB es el de la actividad, no el servicio. Creo que eso es lo que está pasando. ¿Entiendes lo que quiero decir? – matiaslezin
Pero su BroadcastReceiver puede pasar esta información al Servicio directamente, no necesita ser almacenada en una Actividad. – Sam
Porque probé con el contexto del servicio y siempre obtengo un puntero nulo cuando recupero el objeto del dispositivo usb. ¿Como lo harias? Si se establece el servicio para captar la intención del archivo adjunto usb, nunca se llama. No sé por qué Android tiene un problema con ese filtro de intención específico. – matiaslezin