Vì vậy, tôi có một hoạt động trong một ứng dụng bắt đầu một dịch vụ:Làm thế nào để vượt qua một bối cảnh hoạt động trong một ứng dụng vào một dịch vụ trong một ứng dụng khác
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()");
}
}
Hoạt động này được đưa ra bởi mục đích sau:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
Dịch vụ này sau đó ghi nhật ký và kết nối với thiết bị USB tùy chỉnh này. Để thực hiện điều đó, cần bối cảnh hoạt động:
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");
}
}
cha mẹ sẽ là hoạt động bắt đầu dịch vụ. Cách tiếp cận này được sử dụng để làm việc vì mã đó được sử dụng trong cùng một ứng dụng, nhưng bây giờ tôi muốn nó là một dịch vụ để các ứng dụng khác có thể kết nối với nó.
Có cách nào để chuyển ngữ cảnh của hoạt động tới dịch vụ không? Tôi đọc rất nhiều về ý định và bó, có thể chuyển nhượng và tuần tự hóa, nhưng không cái nào hiệu quả với tôi. Tôi cần phải vượt qua bối cảnh.
Bất kỳ ý tưởng nào?
Vâng, tôi biết điều đó. Nhưng vấn đề là khi tôi nhận được ý định từ cha mẹ để có được .getParcelableExtra và yêu cầu thiết bị trả về null. Đối với tôi điều đó xảy ra bởi vì ý định bắt các tập tin đính kèm usb là một trong những từ hoạt động, không phải là dịch vụ. Tôi nghĩ đó là những gì đang xảy ra. Bạn có hiểu ý tôi không? – matiaslezin
Nhưng BroadcastReceiver của bạn có thể chuyển trực tiếp thông tin này đến Dịch vụ, nó không cần phải được lưu trữ trong một Hoạt động. – Sam
Vì tôi đã thử với ngữ cảnh của dịch vụ và tôi luôn nhận được con trỏ rỗng khi truy xuất đối tượng thiết bị USB. Bạn sẽ làm điều này như thế nào? Nếu một bộ dịch vụ để bắt ý định của usb attachement nó chỉ không bao giờ được gọi. Tôi không biết tại sao Android có vấn đề với bộ lọc mục đích cụ thể đó. – matiaslezin