2.在device.c中提權(quán)限,

創(chuàng)新互聯(lián)是一家專業(yè)提供浠水企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為浠水眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。
3.每次都在java層去提權(quán),cmd為提權(quán)命令
public void exeShell(String cmd){
try{
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(
new InputStreamReader(
p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
Log.i("exeShell",line);
}
}
catch(Throwable t)
{
t.printStackTrace();
}
}
1、首先確保你發(fā)送的數(shù)據(jù)是正確的,串口接收到這個數(shù)據(jù)后他能識別,并返回你想要的數(shù)據(jù),如果你發(fā)送的命令本身不要求返回數(shù)據(jù),inputstream是讀取不到數(shù)據(jù)的。 2、其次,要確保發(fā)送數(shù)據(jù)的格式正確,比如一段16進制數(shù)據(jù),你定義為String="01230545"類型,然后發(fā)送的時候out.write(str.getBytes());這樣發(fā)送的數(shù)據(jù)是不對的,應(yīng)該定義一個byte型的數(shù)組,然后發(fā)送這個數(shù)組 3、以上你都確保沒問題了,你可以用循環(huán)去讀取數(shù)據(jù),當讀到的內(nèi)容大于0時停止讀取。用循環(huán)讀取你要確保你已經(jīng)設(shè)置讀取的超時時間了,不然程序有可能阻塞。
最近有項目需要實現(xiàn)windows機器和Android開發(fā)版進行UART串口通信,經(jīng)過3天查找嘗試,特記錄一下最終方案,希望之后的同行少走彎路,最后在git上回開源我最終的方案希望大家支持。
Android 3.0.1
Gradle 4.1
ARM開發(fā)版 : RK3399
PC機器:Win10
開發(fā)機器:MAC 10.13.3
先上圖
由于 android-serialport-api 項目中的so使用較old的ndk編譯,所以在對于Android 6.0 以上版本兼容的時候會報錯 dlopen failed: "has text relocations" 。且使用的mk進行編譯,特升級為用cmake編譯。
升級 android-serialport-api
項目結(jié)構(gòu):
app對應(yīng)原項目中的各個Activity, androidserial 是module 對應(yīng)編譯之前的so,還有API的封裝。可以直接引用androidserial,調(diào)用方法參考app目錄下的activity。
注意 關(guān)于權(quán)限!
當接入開發(fā)板后如果發(fā)現(xiàn) Error You do not have read/write permission to the serial port 需要root 權(quán)限 ,在開發(fā)者模式中開啟root 權(quán)限 adb和應(yīng)用
使用一下命令開啟Android對串口的讀寫權(quán)限
setenforce 0 : 關(guān)閉防火墻,有人說關(guān)鍵是這,但是我的環(huán)境不用關(guān)閉,只要給權(quán)限就可以
注意 關(guān)于ttyS1 - 6 ttyS1 - 6 對應(yīng)的是 UART 串口1-6 一般都是一一對應(yīng)的。這個具體要看一下開發(fā)板的說明。
記錄的比較糙,還請見諒,如有問題請留言,我看到后肯定回復(fù)。項目主要看結(jié)構(gòu),剩下的都是復(fù)制黏貼的事。 git地址:
我這邊也在做Android和硬件設(shè)備的串口通信。
我的通信方式很簡單,我這邊發(fā)送數(shù)據(jù),接收數(shù)據(jù)(接收數(shù)據(jù)的內(nèi)容中有標識位讓我判斷這次接收到的數(shù)據(jù)的相應(yīng)處理動作)
讀數(shù)據(jù)的時候我做的是一個清空的辦法,每一次讀取數(shù)據(jù),如果讀到的數(shù)據(jù)準確則進行處理,如果有誤就清空了在讀。
如果說接收的數(shù)據(jù)要對應(yīng)上發(fā)送的數(shù)據(jù),你可以在Android這邊發(fā)送數(shù)據(jù)后不在發(fā)送數(shù)據(jù)只讀取,并開啟一個計時器,當這段時間內(nèi)么有接收到返回值就繼續(xù)你的發(fā)送和讀取功能
當前名稱:android串口開發(fā),android串口開發(fā)入門
當前URL:http://chinadenli.net/article25/dsessji.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站制作、動態(tài)網(wǎng)站、微信小程序、定制開發(fā)、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)