所以我在启动服务的应用程序中有一个活动:
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()");
}
}
该活动由以下意图启动:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
然后该服务会进行日志记录并与此自定义 USB 设备连接。为此,它需要活动上下文:
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");
}
}
parent 将是启动服务的活动。这种方法曾经有效,因为该代码曾经在同一个应用程序中,但现在我希望它成为一种服务,以便其他应用程序可以连接到它。
有没有办法将活动的上下文传递给服务?我读了很多关于意图和捆绑、可打包和序列化的内容,但没有一个对我有用。我需要传递上下文。
有任何想法吗?