AOA USB连接问题

Abh*_*rya 5 java usb android

我一直在努力使在链接中指定USB连接这里,并成功地实现了它.它的工作正常接受它经常断开连接.我从这个链接和这个链接知道android OS中有一个错误,没有USB连接事件的广播事件.我已经实现了一个接收器来获取USB断开事件,这并不是太重要.此外,我引用链接创建与USB的稳定连接,即USB连接后开始数据通信没有任何损失.当应用程序中存在单个活动或单个屏幕时,整个过程正常工作.

对于多屏幕这个连接有问题,即连接不稳定,我在应用程序中有多个屏幕,我可以随时通过USB在任何活动中接收数据.所以我有2个问题,如果可能的话,我正在寻找一些代码的答案

  1. 如何在多个屏幕上通过Android中的串行USB连接设备进行稳定连接
  2. 如何在多个屏幕上摆脱应用程序中的这种频繁断开连接问题

任何帮助都会很棒

编辑:

我正在添加我负责与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();
    }


}
Run Code Online (Sandbox Code Playgroud)

小智 0

您可能会断开连接,因为您的服务只是绑定服务。第一个活动启动,绑定到服务,然后服务将启动。当您切换到另一个活动时,第一个活动会停止,因此它会解除绑定。此时,该服务不再被绑定,因此被杀死。绑定服务解释如下:http ://developer.android.com/guide/components/bound-services.html

您需要的可能是只要 USB 连接就保持服务运行。为了实现这一点,您需要一个“持久”服务,一个已启动的服务,如下所述: http ://developer.android.com/guide/components/services.html 您可以在接收到的活动的 onCreate 中启动您的服务CONNECTED 事件,使用:

public class HomeActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...
        Intent intent = new Intent(this, UsbCommunicationService.class);
        startService(intent);
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

UsbCommunicationService 将通过此方法启动(不推荐使用 onStart()):

public class UsbCommunicationService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        // TODO : connect to USB...

        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.       
        return START_STICKY;
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,您的所有活动都可以“绑定”、“解除绑定”和“重新绑定”到这个将生存的服务。不要忘记在 DISCONNECT 事件上停止它,使用:

stopSelf(); // Will actually stop AFTER all clients unbind... 
Run Code Online (Sandbox Code Playgroud)