Ich habe daran gearbeitet, USB-Verbindung in der Verbindung here spezifiziert und erfolgreich implementiert. Es funktioniert gut akzeptieren, es wird häufig getrennt. Ich erfuhr von this Link und this Link, dass es ein Fehler in Android OS ist, dass es keine Broadcast-Ereignis von USB-Verbindungsereignis ist. Ich habe einen Empfänger für USB-Trennereignis implementiert, das nicht zu wichtig ist. Auch ich verweise this Link, um stabile Verbindung mit USB zu schaffen, d. H. Datenkommunikation nach USB-Verbindung ohne Verlust zu starten. Diese ganze Sache funktioniert gut, wenn es eine einzelne Aktivität oder einen einzigen Bildschirm in der Anwendung gibt.AOA USB-Verbindungsproblem
Für mehrere Bildschirm diese Verbindung hat Problem, d. H. Verbindung ist nicht stabil und ich habe mehrere Bildschirm in Anwendung, in denen ich Daten über USB in jeder Aktivität zu jeder Zeit erhalten kann. Also ich habe 2 Fragen, die ich suche mich Antworten mit einigem Code, wenn möglich
- Wie kann ich eine stabile Verbindung mit Gerät über eine serielle USB in android über mehrere Bildschirme
- angebracht machen Wie diese häufigen Trennung loszuwerden 01: Problem bei der Anwendung über mehrere Bildschirme
Jede Hilfe wäre
EDIT greatful sein
ich meinen Dienstes bin Zugabe, die für die Kommunikation mit usb verantwortlich ist und startet einen Thread für die kontinuierlichen Empfangsdatum
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.hardware.usb.UsbManager;
import android.os.IBinder;
import arya.omnitalk.com.usb.R;
import arya.omnitalk.com.usb.constants.FileReadingWritingConstants;
import arya.omnitalk.com.usb.constants.GeneralConstant;
import arya.omnitalk.com.usb.constants.UsbDataWriterConstants;
import com.hoho.android.usbserial.driver.UsbSerialProber;
public class UsbCommunicationService extends Service{
public static ArrayList<String> _dataArray = new ArrayList<String>();
private Thread mCommunicationThread = null;
private class ReadThread implements Runnable {
@Override
public void run() {
while (mCommunicationThread!= null && !mCommunicationThread.isInterrupted()) {
// Here I write code to parse data received via USB
}
}
}
@Override
public void onCreate() {
super.onCreate();
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); // Creating object of usb manager
UsbDataWriterConstants.driver = UsbSerialProber.acquire(manager); // Acquiring usb channel
if (UsbDataWriterConstants.driver != null) {
try {
UsbDataWriterConstants.driver.open();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
ReadThread mReadThread = new ReadThread();
mCommunicationThread = new Thread(mReadThread);
mCommunicationThread.start();
} catch (SecurityException e) {
DisplayError(R.string.error_security);
DisplayError(R.string.error_security);
}
}
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
if (mCommunicationThread != null)
mCommunicationThread.interrupt();
super.onDestroy();
}
}
Sie könnten ein paar verschiedene Wege gehen. Ich würde vorschlagen, dass Sie einen Dienst erstellen, der die USB-Verbindung verarbeitet und Ihre Aktivitäten über Ihren Dienst mit USB kommunizieren lässt. – Luis
@Leco Ich mache gerade dieses Ding, aber sobald USB wieder verbunden ist, erstellt es Instanz wieder und ich bekomme keine Daten als, weil ich alte Instanz halte –
Ohne Ihren Code zu sehen, um Anwendungslogik zu verstehen, eine Sache, die in den Sinn kommt Sie können den LaunchMode der Aktivität, die nicht "singleTask" in der Manifestdatei wiederhergestellt werden soll (android: launchMode = "singleTask" unter dem Aktivitäts-Tag). Siehe https://developer.android.com/guide/topics/manifest/activity-element.html#lmode – Luis