我一直在努力使鏈接中指定的USB連接成功實施。它的工作良好接受它經常斷開。我從鏈接和this鏈接知道有一個Android操作系統的錯誤,沒有USB連接事件的廣播事件。我已經實現了一個用於獲取USB斷開連接事件的接收器,這並不太重要。另外,我指的是this鏈接,以便與USB建立穩定的連接,即在USB連接後啓動數據通信而不會丟失。當應用程序中存在單個活動或單個屏幕時,這整個事情工作正常。AOA USB連接問題
對於多屏幕此連接的是有問題的,即連接不穩定,我必須在應用程序的多個畫面中,我可以通過USB的任何活動在任何時間接收數據。所以,我有2個問題,我努力尋找的答案與一些代碼,如果可能的
- 我怎樣才能通過串行USB android系統連接在多個屏幕
- 如何擺脫這種頻繁斷線的設備連接穩定在應用程序在多個屏幕
問題的任何幫助將不勝感激
編輯:
我加入我的服務,這是負責通信與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();
}
}
你可以通過幾種不同的方式來解決這個問題。我建議您創建一個服務來處理USB連接,並讓您的活動通過您的服務與USB進行通信。 – Luis 2013-04-06 05:36:11
@Leco我目前正在做這件事,但一旦USB連接再次它再次創建實例,我沒有獲取數據,因爲我拿着舊實例 – 2013-04-06 09:46:52
沒有看到你的代碼來理解你的應用程序邏輯,有一件事想起來您可以製作不想在清單文件(activity:標籤下的android:launchMode =「singleTask」)中重新實例化「singleTask」的activity的launchMode。請參閱https://developer.android.com/guide/topics/manifest/activity-element.html#lmode – Luis 2013-04-06 14:55:37