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 :
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>
Le fichier res/xml/device_filter.xml :
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>
Ensuite le code du onResume() dans mon Activity :
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)) {
        }
}
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
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);
			}
		}
	}
Donc mon application démarre bien quand je connecte mon périphérique avec un câble OTG à ma tablette.

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