j'ai besoin de lire le fichier à partir du lecteur de stylo, mon code est le suivant:Lire les données stylo lecteur via le mode hôte USB Android
private static final String ACTION_USB_PERMISSION = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice) intent
.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(
UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
// call method to set up device communication
}
} else {
Log.d(TAG, "permission denied for device " + device);
}
}
}
}
};
Pour détecter appareil j'utilise:
mgr = (UsbManager) getSystemService(Context.USB_SERVICE);
devs = new HashMap<String, UsbDevice>();
devs = mgr.getDeviceList();
Et après obtenir l'appareil et l'interface, je reçois point final comme suit:
public void getEndpointCount(View v) {
itf = value.getInterface(0);
endPointCount = itf.getEndpointCount();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("No. of Endpoints: " + endPointCount)
.setTitle("Endpoint Count").setCancelable(true)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
((Button) findViewById(R.id.button4)).setEnabled(true);
}
public void getEndpointDirections(View v) {
endPoint = null;
UsbDeviceConnection conn = null;
if (mgr.hasPermission(value)) {
conn = mgr.openDevice(value);
conn.claimInterface(itf, true);
}
String str = null;
for (int i = 0; i < endPointCount; i++) {
((TextView) findViewById(R.id.tvLoopVal)).setText("" + i);
endPoint = itf.getEndpoint(i);
str = str + " Endpoint: " + i + " - " + endPoint.getDirection()
+ "\n";
if (endPoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
((TextView) findViewById(R.id.tvLoopVal)).setText("" + (i - 1));
if (endPoint.getDirection() == UsbConstants.USB_DIR_IN) {
Toast.makeText(this, "epin", Toast.LENGTH_SHORT).show();
epIn = endPoint;
} else {
epOut = endPoint;
Toast.makeText(this, "epout", Toast.LENGTH_SHORT).show();
}
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(
str + " Mac packet Size = " + endPointUsed.getMaxPacketSize())
.setTitle("Endpoints Directions").setCancelable(true)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
a la fin je reçois le point final maintenant où je suis coincé est ce qui est le nex t étape pour lire ou écrire les données sur la clé USB. Je ne comprends rien à cela et j'ai besoin de conseils pour savoir où regarder maintenant.
De plus, si je ne connecte pas de périphérique USB à ma tablette, il est toujours indiqué 1 périphérique trouvé et lorsque je connecte la clé USB à un câble OTG, 2 périphériques sont détectés !! C'est aussi étrange
EDIT:
Je demande initialisés aussi en utilisant la méthode de demande USB mais je ne comprends pas comment cela fonctionne
public void initializeRequest(View v) {
UsbRequest uReq = new UsbRequest();
Toast.makeText(this, "" + uReq.initialize(conn, epIn),
Toast.LENGTH_SHORT).show();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(
" Is Request Initialized: = " + uReq.initialize(conn, epIn))
.setTitle("Request Initialization").setCancelable(true)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
byte[] bb = new String("Hello").getBytes();
ByteBuffer bBuffer = ByteBuffer.allocate(5);
// bBuffer.put(bb);
uReq.queue(bBuffer, 5);
UsbRequest request = conn.requestWait();
// Object obj = uReq.getClientData();
// Log.v("Client Data", "" + obj.toString());
if (request != null) {
Toast.makeText(this, "Not null request", Toast.LENGTH_SHORT).show();
Log.v("Response of request wait", ""
+ request.getClientData().toString());
request.close();
}
uReq.close();
// Log.v("Response of request wait", "" + conn.requestWait());
// uReq.close();
}
je vérifié que les paramètres sont s'assignés, mais quand cette méthode est exécuté l'application attend simplement, ne fait rien. Après quelque temps Android demande de fermer l'application. Est-ce que c'est parce que l'application function requestWait() attend un type d'événement?
EDIT
D'accord, si l'on oublie la lecture du lecteur de stylo et tout simplement besoin d'obtenir le flux audio à partir d'un périphérique USB, permet de dire microphone où je ne vais pas lire tout ce que je vais prendre tout ce que le micro donnera, alors encore je dois faire quelque chose d'autre alors ce que j'ai fait ici ??
Que suis-je en train de faire est d'avoir une webcam USB connecté au téléphone android et obtenir la vidéo à partir la caméra. Pourquoi est-ce que j'essaie de lire la clé USB est de comprendre comment les périphériques USB communiquent avec le périphérique Android. Je ne sais pas par où commencer la forme sauf la classe usbhost d'android.et à ce stade, je ne vois aucun moyen d'avancer – Calvin
Avez-vous essayé d'énumérer les points de terminaison et d'utiliser un UsbDeviceConnection pour lire les données à partir d'un point de terminaison approprié? – Michael
yup j'ai écrit ce code en question – Calvin