Bonjour,
Je développe actuellement une application qui exploite les nouvelles fonctionnalités fournis par Android, à savoir la communication vers des périphériques en mode Host.
J'ai donc suivi les procédures fournies par Google sur developper.android.com et sur les divers forums et autres blog.
Voici donc peu ou prou ce que j'ai implémenté :
manifest.xml :
Le fichier res/xml/device_filter.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..." android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="13" /> <application android:allowBackup="true" android:icon="@drawable/..." android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > <activity android:name="...Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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>
Ensuite le code du onResume() dans mon Activity :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="5455" product-id="8238" /> </resources>
Et enfin, voici ma méthode qui permet d'ouvrir la connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); String action = intent.getAction(); if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); UsbManager usbManager = (UsbManager) activity.getSystemService(Context.USB_SERVICE); } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { } }
Donc mon application démarre bien quand je connecte mon périphérique avec un câble OTG à ma tablette.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 protected void open(Object o) throws DeviceException { if (device != null && device.getVendorId() == 5455 && device.getProductId() == 8238) { int nbEndPoint = 0; for (int i = 0; i < device.getInterfaceCount(); i++) { UsbInterface usbInterface = device.getInterface(i); for (int j = 0; j < usbInterface.getEndpointCount(); j++) { UsbEndpoint usbEndPoint = usbInterface.getEndpoint(j); nbEndPoint++; switch (nbEndPoint) { case 1: this.pipeWriteData = usbEndPoint; case 2: this.pipeReadCommandResult = usbEndPoint; case 3: this.pipeReadAutoStatus = usbEndPoint; case 4: this.pipeReadImageData = usbEndPoint; } } } usbConnection = manager.openDevice(device); if (usbConnection == null || !usbConnection.claimInterface(device.getInterface(0), true)) { usbConnection = null; throw new DeviceException(DeviceException.UNKNOW_ERROR); } } }
Le hic, si je puis dire, c'est que ce n'est pas le fonctionnement nominal que je désire.
En effet, ma tablette va être enchâssée dans un support, et il sera impossible de déconnecter et connecter le périphérique à chaque fois que l'on en aura besoin.
L'idée est donc, de pouvoir initialiser et établir la connexion USB avec le périphérique, alors que celui ci est déjà connecté, lors du démarrage de l'application.
Or, pour réaliser cela, je ne trouve aucune information relative à ce sujet. Le web ne parle que de l'autre cas, où l'on connecte le périphérique et que celui-ci active le démarrage de l'application.
Je fait donc appel à vous et vos incommensurables connaissances, pour m'aiguiller et me donner quelques pistes de recherche.
Je vous remercie par avance. Cordialement
Partager