Ⅰ 兩台android之間怎麼通過串口進行通信
串口連接不正確. 25芯: A機2腳--B機3腳 A機3腳--B機2腳 A機7腳--B機7腳 9芯: A機2腳--B機3腳 A機3腳--B機2腳 A機5腳--B機5腳 查看原帖>>
Ⅱ android虛擬機串口通信
工具:Virtual Serial Port Driver.
用這個工具虛擬出一對串口。
下載地址
2.用串口調試助手,測試串口通信。
3.用這個命令啟動虛擬機:emulator @2.2 -scale auto -qemu -serial COM3 &
說明:
2.2:是虛擬機的名稱。
COM3是你要選擇的串口。
ps:在cmd中使用這個命令有兩種方式:1)將安卓的sdk的tools文件夾加入到path環境變數中,2)在安卓的sdk的tools文件夾下打開cmd。
4.虛擬機中測試串口通信用谷歌的一個開源項目:android_serialport_api
5.在虛擬機中運行項目。
說明:運行前要獲取設備的許可權
1)在cmd中用adb shell命令,進入虛擬機命令行環境。
2)打開dev文件夾:cd dev
3)獲取許可權:chmod 777 ttyS2
6.谷歌的開源項目不能導入進eclipse,我整理了一下,調通了。
Ⅲ android_studio手機藍牙串口通信源代碼
初涉android的藍牙操作,按照固定MAC地址連接獲取Device時,程序始終是異常終止,查了好多天代碼都沒查出原因。今天改了一下API版本,突然就成功連接了。總結之後發現果然是個坑爹之極的錯誤。
為了這種錯誤拚命查原因浪費大把時間是非常不值得的,但是問題不解決更是揪心。可惜我網路了那麼多,都沒有給出確切原因。今天特此mark,希望後來者遇到這個問題的時候能輕松解決。
下面是我的連接過程,中間崩潰原因及解決辦法。
1:用AT指令獲得藍牙串口的MAC地址,地址是簡寫的,按照常理猜測可得標准格式。
2:開一個String adress= "************" //MAC地址, String MY_UUID= "************"//UUID根據通信而定,網上都有。
3:取得本地Adapter用getDefaultAdapter(); 遠程的則用getRemoteDevice(adress); 之後便可用UUID開socket進行通信。
如果中途各種在getRemoteDevice處崩潰,大家可以查看一下當前的API版本,如果是2.1或以下版本的話,便能確定是API版本問題,只要換成2.2或者以上就都可以正常運行了~ 這么坑爹的錯誤的確很為難初學者。 唉·········· 為這種小trick浪費很多時間真是難過。
(另外有個重要地方,別忘了給manifest裡面加以下兩個藍牙操作許可權哦~)
<uses-permissionandroid:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
下面附上Android藍牙操作中用固定MAC地址傳輸信息的模板,通用搜索模式日後再補刪模板:
=null;
=null;
privateOutputStreamoutStream=null;
privateInputStreaminStream=null;
privatestaticfinalUUIDMY_UUID=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//這條是藍牙串口通用的UUID,不要更改
privatestaticStringaddress="00:12:02:22:06:61";//<==要連接的藍牙設備MAC地址
/*獲得通信線路過程*/
/*1:獲取本地BlueToothAdapter*/
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter==null)
{
Toast.makeText(this,"Bluetoothisnotavailable.",Toast.LENGTH_LONG).show();
finish();
return;
}
if(!mBluetoothAdapter.isEnabled())
{
Toast.makeText(this,"-runthisprogram.",Toast.LENGTH_LONG).show();
finish();
return;
}
/*2:獲取遠程BlueToothDevice*/
BluetoothDevicedevice=mBluetoothAdapter.getRemoteDevice(address);
if(mBluetoothAdapter==null)
{
Toast.makeText(this,"Can'tgetremotedevice.",Toast.LENGTH_LONG).show();
finish();
return;
}
/*3:獲得Socket*/
try{
btSocket=device.(MY_UUID);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Socketcreationfailed.",e);
}
/*4:取消discovered節省資源*/
mBluetoothAdapter.cancelDiscovery();
/*5:連接*/
try{
btSocket.connect();
Log.e(TAG,"ONRESUME:BTconnectionestablished,datatransferlinkopen.");
}catch(IOExceptione){
try{
btSocket.close();
}catch(IOExceptione2){
Log.e(TAG,"ONRESUME:",e2);
}
}
/*此時可以通信了,放在任意函數中*/
/*try{
outStream=btSocket.getOutputStream();
inStream=btSocket.getInputStream();//可在TextView里顯示
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",e);
}
Stringmessage="1";
byte[]msgBuffer=message.getBytes();
try{
outStream.write(msgBuffer);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Exceptionringwrite.",e);
}
*/
通用搜索模式代碼模板:
簡潔簡潔方式1 demo
作用: 用VerticalSeekBar控制一個 LED屏幕的亮暗。
直接上碼咯~
packagecom.example.seed2;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.Dialog;
importandroid.os.Bundle;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.UUID;
importandroid.bluetooth.BluetoothAdapter;
importandroid.bluetooth.BluetoothDevice;
importandroid.bluetooth.BluetoothSocket;
importandroid.content.DialogInterface;
importandroid.util.Log;
importandroid.view.KeyEvent;
importandroid.widget.Toast;
{
privatestaticfinalStringTAG="BluetoothTest";
=null;
=null;
privateOutputStreamoutStream=null;
privateInputStreaminStream=null;
privateVerticalSeekBarvskb=null;
privatestaticfinalUUIDMY_UUID=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//這條是藍牙串口通用的UUID,不要更改
privatestaticStringaddress="00:12:02:22:06:61";//<==要連接的藍牙設備MAC地址
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.vskb=(VerticalSeekBar)super.findViewById(R.id.mskb);
this.vskb.setOnSeekBarChangeListener(newOnSeekBarChangeListenerX());
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter==null)
{
Toast.makeText(this,"Bluetoothisnotavailable.",Toast.LENGTH_LONG).show();
finish();
return;
}
if(!mBluetoothAdapter.isEnabled())
{
Toast.makeText(this,"-runthisprogram.",Toast.LENGTH_LONG).show();
finish();
return;
}
}
.OnSeekBarChangeListener{
publicvoidonProgressChanged(VerticalSeekBarseekBar,intprogress,booleanfromUser){
//Main.this.clue.setText(seekBar.getProgress());
/*Stringmessage;
byte[]msgBuffer;
try{
outStream=btSocket.getOutputStream();
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:OutputStreamcreationfailed.",e);
}
message=Integer.toString(seekBar.getProgress());
msgBuffer=message.getBytes();
try{
outStream.write(msgBuffer);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Exceptionringwrite.",e);
}*/
}
(VerticalSeekBarseekBar){
Stringmessage;
byte[]msgBuffer;
try{
outStream=btSocket.getOutputStream();
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:OutputStreamcreationfailed.",e);
}
message=Integer.toString(seekBar.getProgress());
msgBuffer=message.getBytes();
try{
outStream.write(msgBuffer);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Exceptionringwrite.",e);
}
}
publicvoidonStopTrackingTouch(VerticalSeekBarseekBar){
Stringmessage;
byte[]msgBuffer;
try{
outStream=btSocket.getOutputStream();
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:OutputStreamcreationfailed.",e);
}
message=Integer.toString(seekBar.getProgress());
msgBuffer=message.getBytes();
try{
outStream.write(msgBuffer);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Exceptionringwrite.",e);
}
}
}
@Override
publicvoidonStart()
{
super.onStart();
}
@Override
publicvoidonResume()
{
super.onResume();
BluetoothDevicedevice=mBluetoothAdapter.getRemoteDevice(address);
try{
btSocket=device.(MY_UUID);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Socketcreationfailed.",e);
}
mBluetoothAdapter.cancelDiscovery();
try{
btSocket.connect();
Log.e(TAG,"ONRESUME:BTconnectionestablished,datatransferlinkopen.");
}catch(IOExceptione){
try{
btSocket.close();
}catch(IOExceptione2){
Log.e(TAG,"ONRESUME:",e2);
}
}
//.
/*try{
outStream=btSocket.getOutputStream();
inStream=btSocket.getInputStream();
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",e);
}
Stringmessage="read";
byte[]msgBuffer=message.getBytes();
try{
outStream.write(msgBuffer);
}catch(IOExceptione){
Log.e(TAG,"ONRESUME:Exceptionringwrite.",e);
}
intret=-1;
while(ret!=-1)
{
try{
ret=inStream.read();
}catch(IOExceptione)
{
e.printStackTrace();
}
}
*/
}
@Override
Ⅳ android things 怎麼使用串口通信方式,進入或登錄系統
網路上搜索「串口調試助手」或者「串口調試精靈」,進行簡單的安裝。 點擊運行串口調試助手,進入相應的界面。 設置串口通訊的介面,波特率校驗位等相關信息。 在發送欄輸入要發送的信息,選擇手動發送或者自動發送,這時如果沒有什麼錯誤,對方的串口通信工具就會收到發送的內容。 設置接收區域的相關信息,這時對方如果發送信息,接收區就會收到相應的內容。 另外也可以進行文件的發送,但是串口通信的速率過慢,傳輸文件的話會很耗時,不過可以用來檢測通信的正確性。
Ⅳ android 串口通信丟失數據原因
我現在測試也遇到這個問題,我是根據android_serialport_api裡面的代碼做的,就是在android端接收串口發過來的數據不完整,幾乎每次都只是接收一部分的數據,另外一部分就不知道跑到哪裡去,請問你這個問題你解決了嗎
Ⅵ 如何使用android studio實現串口通信
為了幫助網友解決「Android studio使用http」相關的問題,中國學網通過互聯網對「Android studio使用http」相關的解決方案進行了整理,用戶詳細問題包括:androidandroid?studiohttp協議 本人新手,在使用android Studio編寫網站展示的應用程序中,使用HttpClient httpClient = new DefaultHttpClient();獲取客服端時,編譯器顯示沒有HttpClient這個類。網上查資料,換成CloseableHttpClient httpclient = HttpClients.createDefault();也同樣沒有類CloseableHttpClient 這個類。上面兩個類都是被deprecated了。
請問android Studio 1.2.1.1這個版本,實現http協議GET數據的介面是哪個?在哪個包?
,具體解決方案如下:
解決方案1:
HttpURLConnection
conn.setRequestMethod("GET");
包的話應該是:import java.net.HttpURLConnection; sdk帶了
解決方案2:
引用 1 樓 inquisitive_plus 的回復:HttpURLConnection
conn.setRequestMethod("GET");
包的話應該是:import java.net.HttpURLConnection; sdk帶了
你好!這個是使用URLConnection方式實現Android的網路通信。難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
解決方案3:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://localhost/");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
}
}
解決方案4:
引用 3 樓 stublue 的回復:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://localhost/");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
}
}
你好!你用的開發環境應該是Eclipse吧!我用的工具是android Studio 1.2.1.1,上面提示'org.apache.http.impl.client.DefaultHttpClient' is deprecated。不能使用!我不想換開發環境!難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
解決方案5:
引用 2 樓 iloyou19 的回復:Quote: 引用 1 樓 inquisitive_plus 的回復:
HttpURLConnection
conn.setRequestMethod("GET");
包的話應該是:import java.net.HttpURLConnection; sdk帶了
你好!這個是使用URLConnection方式實現Android的網路通信。難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
1.2.1.1支持的,我就是這個版本64位
在Android studio/lib里你可以找到HttpClient-XXX.jar
你需要的java常規jar包在lib里都能找到
解決方案6:
引用 4 樓 iloyou19 的回復:Quote: 引用 3 樓 stublue 的回復:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://localhost/");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
}
}
你好!你用的開發環境應該是Eclipse吧!我用的工具是android Studio 1.2.1.1,上面提示'org.apache.http.impl.client.DefaultHttpClient' is deprecated。不能使用!我不想換開發環境!難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
我的就是在Android studio中啊!
版本是1.2.2
要想不提示deprecated,在類上加個註解 @SuppressWarnings("deprecation")
解決方案7:
你沒有導入包吧
解決方案8:
引用 6 樓 stublue 的回復:Quote: 引用 4 樓 iloyou19 的回復:
Quote: 引用 3 樓 stublue 的回復:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://localhost/");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
}
}
你好!你用的開發環境應該是Eclipse吧!我用的工具是android Studio 1.2.1.1,上面提示'org.apache.http.impl.client.DefaultHttpClient' is deprecated。不能使用!我不想換開發環境!難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
我的就是在Android studio中啊!
版本是1.2.2
要想不提示deprecated,在類上加個註解 @SuppressWarnings("deprecation")
你好!這個註解我不知道怎麼用!!麻煩能給我一個完整的工程嗎?謝謝!
解決方案9:
導的包對?
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
解決方案10:
引用 5 樓 inquisitive_plus 的回復:Quote: 引用 2 樓 iloyou19 的回復:
Quote: 引用 1 樓 inquisitive_plus 的回復:
HttpURLConnection
conn.setRequestMethod("GET");
包的話應該是:import java.net.HttpURLConnection; sdk帶了
你好!這個是使用URLConnection方式實現Android的網路通信。難道android Studio 1.2.1.1這個工具不支持使用HTTPClient方式來實現android的網路通信?
1.2.1.1支持的,我就是這個版本64位
在Android studio/lib里你可以找到HttpClient-XXX.jar
你需要的java常規jar包在lib里都能找到
我的androidstudio/lib裡面也有httpclient-4.3.6.jsr,可是就是解析不出來這個
import org.apache.http.NameValuePair
這里顯示紅色
我在另一台機的1.0版本的Androidstudio就能解析出來
這個好像不用另外配置引入jar的吧
解決方案11:
用volley吧,大文件下載不適用!!!
參考:
http://www.kwstu.com/ArticleView/kwstu_20144118313429
解決方案12:
我現在也遇到了這個問題,樓主你解決了沒有呀?
解決方案13:
HttpClient是SDK自帶的啊 為什麼會沒有
解決方案14:
API9之上不再支持httpclient,從官方網站可以查到。換成HttpURLConnection
解決方案15:
http://..com/link?url=-U7xmd4pkvj0WWDIkRaT-
解決方案16:
我也遇到這種問題搞了半天都沒弄好,最後還是直接把httpclient這個包直接導到工程去了。。。
解決方案17:
android sdk中就已經包含了這個包(如上圖,我截的是sdk22版本),跟android studio版本沒有關系。
解決方案18:
這個問題現在我沒有弄了,感謝大家的回答!有位大神給我私信了!好像能用(我沒有試),遇到相同問題的各位試一下吧!
silence12s21給你發了私信
silence12s21 : httpmime-4.5.jar httpcore-4.4.1.jar httpclient-4.5.jar 同時導入了這三個包後就可以用了。
Ⅶ android串口通信如何發送16進制給給下位機
已解決,發送串口幀數據時,對於16進制數據定義,直接用byte[]數組就行了,不需要用Array.fill函數;
Ⅷ 我想用Android手機與單片機進行串口通信,從而可以控制單片機,該如何實現呢
不過你還得注意的是手機的USB轉串口電平是TTL電平,所以你的單片機板子的串口也得是TTL,在就是分清楚交叉連接或者直連。
Ⅸ Android手機使用USB介面與RS232通訊
從技術上講,是肯定可以的。方案如下:
手機USB -> USB HOST -> USB轉232 -> RS232設備
主要工作會有:
手機USB端的程序需要定製。
USB HOST端的程序需要定製,如果不用PC機,甚至連USB HOST設備都要做。
RS232設備的程序需要重寫。
你確定你想這么做嗎?