Poniższe kroki można rozwiązać w celu rozwiązania wymienionych problemów.
Proces montażu urządzenia jako pamięci masowej USB jest niespójny na różnych urządzeniach i specyficznych dla producenta. Niektóre urządzenia, takie jak Nexus S, oferują "Włączanie pamięci USB" po podłączeniu urządzenia do komputera za pomocą kabla USB. Inne urządzenia, takie jak Galaxy S3, wymagają teraz aplikacji, aby uruchomić urządzenie jako pamięć masową. Tak czy inaczej, urządzenia z systemem Android zazwyczaj oferują taką funkcję, a będziesz musiał utworzyć plik zgodny ze specyfikacją producenta urządzenia.
trzeba dodać do pliku manifestu aplikacji przed rozpoczęciem pracy z API USB Host:
- Ponieważ nie wszystkie urządzenia z systemem Android są gwarantowane do obsługi API hosta USB, to element, który deklaruje, że Twój Aplikacja korzysta z funkcji android.hardware.usb.host.
- Jeśli chcesz, aby Twoja aplikacja otrzymywała powiadomienie o podłączonym urządzeniu USB, określ parę i element dla celów android.hardware.usb.action.USB_DEVICE_ATTACHED w głównej aktywności.
dodawania USB_DEVICE_ATTACHED do manisfest pliku:
<manifest ...>
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />
...
<application>
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
Aby pomóc APP odkryć konkretne urządzenie USB można użyć filtru zamiar:
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
trzeba także określić urządzenie i Identyfikator dostawcy:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="1234" product-id="5678" />
</resources>
To pytanie wystarczy, aby poradzić sobie z połączeniem USB host.Teraz nazywają USB:
int LIBUSB_CALL libusb_open2(libusb_device *dev, libusb_device_handle **handle, int fd);
Wykorzystanie deskryptor otworzyć połączenie do usb device - np
UsbManager myUsbManager = (UsbManager)
getSystemService(Context.USB_SERVICE);
UsbAccessory myUsbAccessory = (myUsbManager.getAccessoryList())[0];
ParcelFileDescriptor pfd = myUsbManager.openAccessory(myUsbAccessory);
FileDescriptor fileDescriptor = pfd.getFileDescriptor();
FileInputStream myFileInputStream = new FileInputStream(fileDescriptor);
FileOutputStream myFileOutputStream = new FileOutputStream(fileDescriptor);
Jeśli nadal masz problemy z poziomem SELinux, tutaj masz jakieś zmiany można użyć, aby Państwa Program płynnie:
// default.prop
ro.secure=1 -----------------> ro.secure=0
ro.adb.secure=1 -----------------> ro.adb.secure=0
//init.rc
setsebool debugfs 1 --------> setsebool debugfs 0
setenforce 0
setprop selinux.reload_policy 1 -------> setprop selinux.reload_policy 0
// init.target.rc
setprop selinux.reload_policy 1 -----> setprop selinux.reload_policy 0
Jak SELinux jest domyślnie ustawiony na egzekwować najwyższe bezpieczeństwo, a chcesz udzielić klientowi dostępu do Android Devi ce przez USB.

zależności od marki i modelu z Androidem, spróbuj odłączyć kabel USB łączący urządzenie z pulpitu, a następnie podłącz go ponownie. Powinieneś zostać poproszony o „Włącz USB” przechowywania. W takim przypadku przejdź do ustawień Ustawienia → Więcej ... na urządzeniu z systemem Android i poszukaj opcji pamięci masowej USB.
http://www.pocketables.com/images/old/6a00d83451c9ec69e201675f40c44a970b-500wi.png
Ewentualnie poszukaj procesu pamięci masowej USB zalecanego przez producenta urządzenia. Po włączeniu pamięci USB urządzenie informuje, że niektóre aplikacje przestaną działać, i zrób to. Teraz przejdź do komputera stacjonarnego i przejdź do nośnika pamięci masowej USB, często nazywanego NO NAME, jeśli nie zmieniłeś jego nazwy. Kliknij urządzenie pamięci masowej, a tam, w folderze stóp, znajdź plik o nazwie data.tsv.

Można również sprawdzić data.tsv otwierając go w swoim ulubionym edytorze tekstowym. Znajdziesz tam dwie kolumny starannie oddzielone tabulatorem; w każdym wierszu znajdziesz parę wartości całkowitych. To jest wystarczające dla naszego projektu. Bardziej skomplikowane projekty danych zazwyczaj wymagają unikalnego identyfikatora dla każdego wiersza, wiersza w jednej tabeli, aby wskazać konkretny rekord w innym.

Według twojej development environment, masz również dostroić swoje ustawienia. Jeśli pracujesz w systemie Windows, wykonaj instalację sterownika USB instructions available. Jeśli pracujesz nad Linuksem, postępuj zgodnie z instrukcjami dla urządzenia setting up do programowania.

Ponadto, warto również wspomnieć, że wiele poprzednio wydane urządzeniach z systemem Android mogą jedynie działać jako urządzenie USB i nie można inicjować połączenia z zewnętrznymi urządzeniami USB. Obsługa Android Open Accessory (AOA) przezwycięża to ograniczenie i umożliwia budowanie akcesoriów, które mogą wchodzić w interakcje z szeregiem urządzeń z systemem Android, pozwalając akcesorium na zainicjowanie urządzenia connection. Przykład wspólnego korzystania z Androida Open Accessory można znaleźć w projekcie: nagrywaj i odtwarzaj dźwięk za pomocą USB host mode - co oczywiście wymaga uruchomienia trybu USB.

Umieszczenie Android do komunikowania się przez USB z Arduino mikrokontrolerów jest również rodzajem realizacji, które wykazały się bardzo udany ostatnio, ponieważ pozwala rozszerzyć Android możliwości integracji dodatkowych funkcji za pośrednictwem różnych urządzeń podejście do rozwiązania. Typowym Arduino Szkic, aby umożliwić komunikację urządzenia z systemem Android USB będzie wyglądać następująco:
// the USB Host libraries
#include <Max3421e.h>
#include <Usb.h>
// the AOA library
#include <AndroidAccessory.h>
void setup();
void loop();
void setup()
{ // start serial debugging
Serial.begin(115200);
Serial.print("\r\nADK has run setup().");
Serial.println("Ready to start USB communication...");
}
void loop()
{ // example - read the voltage from a sensor
uint16_t val;
val = analogRead(TEMP_SENSOR); // or any sort of input
Serial.println(val,HEX);
Serial.write(val);
// Delay for 100 milliseconds.
delay(100);
}
Wszystkie projekty Arduino musi mieć konfigurację() i metodę loop() zadeklarowanej inaczej Android nie będzie komunikować się prawidłowo.
Należy również pamiętać, że wykaz minimalnych wymagań niezbędnych do korzystania AOA:
- An AOA-kompatybilnego urządzenia z systemem Android. Aby przetestować zgodność przed wypróbowaniem tego przykładu, zapoznaj się z sekcją "Obsługiwane urządzenia z systemem Android", aby uzyskać linki do aplikacji demonstracyjnych Microchip AOA dostępnych w Google Play.
- Kompatybilna płyta mikrokontrolera. Arduino Mega ADK będzie łatwą opcją, jeśli nie jesteś pewien.

Możliwości Android urządzeń wykorzystujących USB są niesamowite, a popyt na innowacyjne aplikacje, które są zdolne do pełnego wykorzystania tych funkcji jest ustawiony znacznie rosną.
Czy to działa dla 'UsbDevice', a także' UsbAccessory'? –
Tak, działa. Ale dla UsbAccessry musisz użyć intencji USB_ACCESSORY_ATTACHED. – Avanz