導航:首頁 > 操作系統 > android屏串口

android屏串口

發布時間:2023-03-04 00:14:21

android開發之串口通信:AndroidSerialPort

Android 串口通信,基於 谷歌官方android-serialport-api 編譯

項目github地址: https://github.com/AIlll/AndroidSerialPort

讀取數據時很可能會遇到分包的情況,即不能一次性讀取正確的完整的數據

解決辦法:可以在讀取到數據時,讓讀取數據的線程sleep一段時間,等待數據全部接收完,再一次性讀取出來。這樣應該可以避免大部分的分包情況

只接收一條數據的情況下,以上方法可以應對數據分包,數據量多的情況下需要考慮是否會因為sleep導致接收多條數據,可以根據通信協議核對包頭包尾等參數。

打開串口時,會檢測讀寫許可權,當沒有許可權時,會嘗試對其進行提權

⑵ android串口消息

android串口消息連接的方法為:
1.模擬器可以使用PC的串口。
啟動模擬器並載入PC串口 命令如下。
運行 emulator @模擬器名稱 -qmu -serial COM1。
2.查看串口是否被載入。
啟動後使用 adb shell 命令打開命令行
cd dev 查看會發現ttyS0 ttyS1 ttyS2,其他ttyS2 就是我們載入上來的串口COM1
3.修改許可權
chmod 777 ttyS2
現在我們可以開發串口程序了。
4.串口程序實例
下載libserial_port.so ,放入libs/armeabi 目錄,可以自己創建此目錄
libserial_port.so 下載地址:
http://code.google.com/p/android-serialport-api/
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.util.Log;

public class SerialPort {

private static final String TAG = "SerialPort";

private FileDescriptor mFd;
private FileInputStream mFileInputStream;
private FileOutputStream mFileOutputStream;

public SerialPort(File device, int baudrate) throws SecurityException, IOException {

if (!device.canRead() || !device.canWrite()) {
try {
Process su;
su = Runtime.getRuntime().exec("/system/bin/su");
String cmd = "chmod 666 " + device.getAbsolutePath() + "n"
+ "exitn";
su.getOutputStream().write(cmd.getBytes());
if ((su.waitFor() != 0) || !device.canRead()
|| !device.canWrite()) {
throw new SecurityException();
}
} catch (Exception e) {
e.printStackTrace();
throw new SecurityException();
}
}

mFd = open(device.getAbsolutePath(), baudrate);
if (mFd == null) {
Log.e(TAG, "native open returns null");
throw new IOException();
}
mFileInputStream = new FileInputStream(mFd);
mFileOutputStream = new FileOutputStream(mFd);
}

public InputStream getInputStream() {
return mFileInputStream;
}

public OutputStream getOutputStream() {
return mFileOutputStream;
}

//JNI
private native static FileDescriptor open(String path, int baudrate);
public native void close();
static {
System.loadLibrary("serial_port");
}
}

####################################

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class PrintClass {

//輸入流
private static InputStream in;
//輸出流
private static OutputStream out;

private static final String PORT = "/dev/ttyS2";//串口

private SerialPort serialPort;

private void Connect()
{
try {
serialPort = new SerialPort(new File(PORT), 38400);

in = serialPort.getInputStream();
out = serialPort.getOutputStream();

} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void CloseSerialPort()
{
try {
out.close();
in.close();
serialPort.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

⑶ Android UART 串口通信

最近有項目需要實現windows機器和Android開發版進行UART串口通信,經過3天查找嘗試,特記錄一下最終方案,希望之後的同行少走彎路,最後在git上回開源我最終的方案希望大家支持。

Android 3.0.1
Gradle 4.1
ARM開發版 : RK3399
PC機器:Win10
開發機器:MAC 10.13.3

先上圖

由於 android-serialport-api 項目中的so使用較old的ndk編譯,所以在對於Android 6.0 以上版本兼容的時候會報錯 dlopen failed: "has text relocations" 。且使用的mk進行編譯,特升級為用cmake編譯。

升級 android-serialport-api

項目結構:

app對應原項目中的各個Activity, androidserial 是mole 對應編譯之前的so,還有API的封裝。可以直接引用androidserial,調用方法參考app目錄下的activity。

注意 關於許可權!

當接入開發板後如果發現 Error You do not have read/write permission to the serial port 需要root 許可權 ,在開發者模式中開啟root 許可權 adb和應用

使用一下命令開啟Android對串口的讀寫許可權

setenforce 0 : 關閉防火牆,有人說關鍵是這,但是我的環境不用關閉,只要給許可權就可以

注意 關於ttyS1 - 6 ttyS1 - 6 對應的是 UART 串口1-6 一般都是一一對應的。這個具體要看一下開發板的說明。

記錄的比較糙,還請見諒,如有問題請留言,我看到後肯定回復。項目主要看結構,剩下的都是復制黏貼的事。 git地址:https://github.com/braincs/AndroidSerialLibrary

閱讀全文

與android屏串口相關的資料

熱點內容
高爾夫電台怎麼添加到文件夾 瀏覽:237
四川麻將一般下哪個app 瀏覽:862
反編譯exe腳本 瀏覽:460
源碼文件夾怎麼編譯到固件中 瀏覽:912
ERp列印伺服器錯誤怎麼弄 瀏覽:111
蚌埠u盤加密軟體有哪些 瀏覽:178
前端如何認證伺服器 瀏覽:554
linux切換db2用戶命令 瀏覽:308
相片如何用電解壓 瀏覽:906
碩士程序員去學校當老師 瀏覽:120
pythonstr提取到字典 瀏覽:820
程序員那麼可愛有人看上陸漓了 瀏覽:878
php正則提取圖片 瀏覽:105
pythonlinuxdjango 瀏覽:564
php中文返回亂碼 瀏覽:91
宿舍裝的電信怎麼加密 瀏覽:745
為什麼壓縮文件解壓後變少了 瀏覽:426
現在安卓充電器普遍是什麼型號 瀏覽:717
9日均線36均線主圖指標源碼 瀏覽:351
程序員阿里文化完整版 瀏覽:100