ここのリンクで指定されている USB 接続の作成に取り組んでおり、正常に実装されています。その動作は正常に受け入れられ、頻繁に切断されます。このリンクとこのリンクから、Android OS に USB 接続イベントのブロードキャスト イベントがないというバグがあることを知りました。あまり重要ではない USB 切断イベントを取得するためのレシーバーを実装しました。また、このリンクを参照して、USB との安定した接続を作成します。つまり、USB 接続後に損失なくデータ通信を開始します。アプリケーションに単一のアクティビティまたは単一の画面がある場合、この全体が正常に機能しています。
複数の画面の場合、この接続に問題があります。つまり、接続が安定しておらず、いつでも任意のアクティビティで USB 経由でデータを受信できるアプリケーションに複数の画面があります。だから私は可能であればいくつかのコードで答えを求めている2つの質問があります
- AndroidでシリアルUSB経由で接続されたデバイスと複数の画面で安定した接続を確立するにはどうすればよいですか
- 複数画面のアプリケーションで頻繁に切断される問題を解決する方法
どんな助けでも素晴らしいでしょう
編集:
USBとの通信を担当し、データを継続的に受信するためのスレッドを開始するサービスを追加しています
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();
}
}