我一直在努力使在链接中指定USB连接这里,并成功地实现了它.它的工作正常接受它经常断开连接.我从这个链接和这个链接知道android OS中有一个错误,没有USB连接事件的广播事件.我已经实现了一个接收器来获取USB断开事件,这并不是太重要.此外,我引用此链接创建与USB的稳定连接,即USB连接后开始数据通信没有任何损失.当应用程序中存在单个活动或单个屏幕时,整个过程正常工作.
对于多屏幕这个连接有问题,即连接不稳定,我在应用程序中有多个屏幕,我可以随时通过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)
| 归档时间: |
|
| 查看次数: |
1667 次 |
| 最近记录: |