安卓usb數據接收

之前在論壇裏面求助了關於監聽數據接收的問題,因爲第一次做這方面,可能我提的問題太簡單了,大神都不願意回答我,(之前的帖子)晚上翻牆瀏覽網站發現問題的解決辦法,

原文是:最近老闆讓弄安卓和一塊板子通信,現在的情況是我第一次發送數據可以接受到(一些參數的初始化),然後我再發送數據,就接收不到了,數據肯定是發送成功了,只是我的邏輯代碼有問題(新手,懂的較少),因爲我退出瞭然後再進入程序數據就接收到了,不知道如何實現線程內的代碼一直處於監聽狀態,我的代碼:

Runnable runnable = new Runnable() {
 
        @Override
        public void run() {
            // TODO Auto-generated method stub
            UsbRequest request = new UsbRequest();
            boolean initilzed = request.initialize(conn, endpointIn);
            System.out.println(initilzed);
            ByteBuffer buffer = ByteBuffer.allocate(38);
            request.queue(buffer, 38);
            while (initilzed) {
                if (conn.requestWait().equals(request)) {
                    byte[] data = buffer.array();
                    conn.bulkTransfer(endpointIn, data, 38, 1000);
                    // System.out.println(data.toString());
                    final String message = "Read " + data.length + " bytes: \n"
                            + HexDump.dumpHexString(data) + "\n\n";
                    System.out.println(message);
                }
            }
        }
    };
現在說下解決辦法:其實很簡單,就是loop循環裏面執行異步任務:

	Runnable runnable = new Runnable() {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			// System.out.println("進入線程了");
			while (true) {
				synchronized (this) {
					UsbRequest request = new UsbRequest();
					request.initialize(conn, endpointIn);
					ByteBuffer buffer = ByteBuffer.allocate(38);
					request.queue(buffer, 38);
					if (conn.requestWait().equals(request)) {
						byte[] data = buffer.array();
						conn.bulkTransfer(endpointIn, data, 38, 1000);
						final String message = "Read " + data.length
								+ " bytes: \n" + HexDump.dumpHexString(data)
								+ "\n\n";
						System.out.println(message);
					}
				}

			}

		}
	};
高手見諒,權當是自己記錄的一點心得,畢竟網上別人關於這方面資料少,具體的例子也沒有。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章