Je dois lire et écrire des données sur les ports COM de l'appareil en utilisant Android, j'utilise le package javax.comm pour cela, mais lorsque j'ai installé le fichier apk, il n'affiche aucun port de l'appareil, donc y a-t-il une autorisation que je besoin d'ajouter dans le fichier manifeste?
Votre problème concerne les systèmes d'exploitation. Android exécute Linux sous le capot , et Linux traite les ports série différemment de Windows. javax.comm
contient également win32com.dll
, un fichier de pilote , que vous ne pourrez pas installer sur un appareil Android. Si vous trouvez un moyen de réaliser ce que vous essayez) pour ce faire, vous ne pouvez pas réellement rechercher un port "COM" dans un environnement Linux. Les ports série porteront des noms différents.
Windows Com Port Linux equivalent
COM 1 /dev/ttyS0
COM 2 /dev/ttyS1
COM 3 /dev/ttyS2
Donc, hypothétiquement, si votre idée devait marcher, vous devez chercher ces noms.
Heureusement pour vous, Android a des dispositions pour l'interfaçage avec des périphériques USB (auxquels je suppose que vous souhaitez vous connecter, par opposition aux ports parallèles ou RS-232). Pour ce faire, vous devrez définir votre appareil en tant que SB Host. Voici ce que vous voudrez faire:
USBManager
.USBInterface
et USBEndpoint
.Voici mon estimation approximative de la façon dont vous allez le faire. Votre code aura, bien sûr, une façon plus mature de faire les choses.
String YOUR_DEVICE_NAME;
byte[] DATA;
int TIMEOUT;
USBManager manager = getApplicationContext().getSystemService(Context.USB_SERVICE);
Map<String, USBDevice> devices = manager.getDeviceList();
USBDevice mDevice = devices.get(YOUR_DEVICE_NAME);
USBDeviceConnection connection = manager.openDevice(mDevice);
USBEndpoint endpoint = device.getInterface(0).getEndpoint(0);
connection.claimInterface(device.getInterface(0), true);
connection.bulkTransfer(endpoint, DATA, DATA.length, TIMEOUT);
Matériel supplémentaire pour votre plaisir de lecture: http://developer.Android.com/guide/topics/connectivity/usb/Host.html
Je ne suis pas un expert mais pour tous ceux qui cherchent à connecter des ports série RS-232 ou à ouvrir un port série et ne peuvent pas trouver leur appareil via UsbManager, vous pouvez trouver tous vos appareils en utilisant une approche comme celle-ci
mDrivers = new Vector<Driver>();
LineNumberReader r = new LineNumberReader(new FileReader("/proc/tty/drivers"));
String l;
while ((l = r.readLine()) != null) {
String drivername = l.substring(0, 0x15).trim();
String[] w = l.split(" +");
if ((w.length >= 5) && (w[w.length - 1].equals("serial"))) {
mDrivers.add(new Driver(drivername, w[w.length - 4]));
}
}
Après avoir trouvé tous les pilotes, parcourez tous les pilotes pour obtenir tous vos appareils, quelque chose comme ça
mDevices = new Vector<File>();
File dev = new File("/dev");
File[] files = dev.listFiles();
if (files != null) {
int i;
for (i = 0; i < files.length; i++) {
if (files[i].getAbsolutePath().startsWith(mDeviceRoot)) {
Log.d(TAG, "Found new device: " + files[i]);
mDevices.add(files[i]);
}
}
}
Voici le Driver Class Constructor avec deux variables membres
public Driver(String name, String root) {
mDriverName = name;
mDeviceRoot = root;
}
Pour ouvrir un port série, vous pouvez utiliser Android Serial Port Api simplement ouvrir le port série sur votre appareil et écrire (vous devez connaître le chemin de votre appareil et le débit en bauds, mon appareil est ttyMt2, avec le débit en bauds) 96000)
int baurate = Integer.parseInt("9600");
mSerialPort = new SerialPort(mDevice.getPath(), baurate, 0);
mOutputStream = mSerialPort.getOutputStream();
byte[] bytes = hexStr2bytes("31CE");
mOutputStream.write(bytes);
au lieu de perdre du temps sur ce code, vous pouvez télécharger le projet complet depuis https://github.com/licheedev/Android-SerialPort-Tool