導航:首頁 > 操作系統 > android藍牙串口通訊

android藍牙串口通訊

發布時間:2023-06-11 01:22:20

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裡面加以下兩個藍牙操作許可權哦~)

㈡ Android藍牙BLE連接如何設置串口,數據格式為含1位起始位、7位數據位、1位奇偶校驗位和1位終止位

字元長度=1+7+1+2=11 b/字元
數據速率R1=11×100=1100 b/s
有效數據速率R=7×100=700 b/s
選B

㈢ android藍牙串口通信,接收數據問題

http://stackoverflow.com/questions/16089261/how-to-convert-byte-valueto-hex-and-then-to-decimal-which-is-from-bluetooth-spp

㈣ android藍牙開發,PC端模擬串口接收字元,該如何編程

您好,android藍牙這方面還是很好搞的,因為大家的方式都是差不多的。先說說如何開啟藍牙設備和設置可見時間:

private void search() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (!adapter.isEnabled()) {
adapter.enable();
}
Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
enable.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 3600); //3600為藍牙設備可見時間
startActivity(enable);
Intent searchIntent = new Intent(this, ComminuteActivity.class);
startActivity(searchIntent);
}

首先,需要獲得一個BluetoothAdapter,可以通過getDefaultAdapter()獲得系統默認的藍牙適配器,當然我們也可以自己指定,但這個真心沒有必要,至少我是不需要的。然後我們檢查手機的藍牙是否打開,如果沒有,通過enable()方法打開。接著我們再設置手機藍牙設備的可見,可見時間可以自定義。

完成這些必要的設置後,我們就可以正式開始與藍牙模塊進行通信了:

public class ComminuteActivity extends Activity {
private BluetoothReceiver receiver;
private BluetoothAdapter bluetoothAdapter;
private List<String> devices;
private List<BluetoothDevice> deviceList;
private Bluetooth client;
private final String lockName = "BOLUTEK";
private String message = "000001";
private ListView listView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_layout);

listView = (ListView) this.findViewById(R.id.list);
deviceList = new ArrayList<BluetoothDevice>();
devices = new ArrayList<String>();
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.startDiscovery();
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
receiver = new BluetoothReceiver();
registerReceiver(receiver, filter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setContentView(R.layout.connect_layout);
BluetoothDevice device = deviceList.get(position);
client = new Bluetooth(device, handler);
try {
client.connect(message);
} catch (Exception e) {
Log.e("TAG", e.toString());
}
}
});
}

@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}

private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Bluetooth.CONNECT_FAILED:
Toast.makeText(ComminuteActivity.this, "連接失敗", Toast.LENGTH_LONG).show();
try {
client.connect(message);
} catch (Exception e) {
Log.e("TAG", e.toString());
}
break;
case Bluetooth.CONNECT_SUCCESS:
Toast.makeText(ComminuteActivity.this, "連接成功", Toast.LENGTH_LONG).show();
break;
case Bluetooth.READ_FAILED:
Toast.makeText(ComminuteActivity.this, "讀取失敗", Toast.LENGTH_LONG).show();
break;
case Bluetooth.WRITE_FAILED:
Toast.makeText(ComminuteActivity.this, "寫入失敗", Toast.LENGTH_LONG).show();
break;
case Bluetooth.DATA:
Toast.makeText(ComminuteActivity.this, msg.arg1 + "", Toast.LENGTH_LONG).show();
break;
}
}
};

private class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (isLock(device)) {
devices.add(device.getName());
}
deviceList.add(device);
}
showDevices();
}
}

private boolean isLock(BluetoothDevice device) {
boolean isLockName = (device.getName()).equals(lockName);
boolean isSingleDevice = devices.indexOf(device.getName()) == -1;
return isLockName && isSingleDevice;
}

private void showDevices() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
devices);
listView.setAdapter(adapter);
}
}

㈤ Android藍牙傳輸速率限制在串口嗎

這個限制是在串口。
為了保證有效通訊,根據電、傳輸介質等的物理特性結合串口設備使用的要求,確定RS232最大傳輸速率只能是115200,然後逐級二分得到57600,28800,19200??為適應這些速率,設計相應的晶振頻率。
串口通信是指外設和計算機間,通過數據信號線、地線、控制線等,按位進行傳輸數據的一種通訊方式。這種通信方式使用的數據線少,在遠距離通信中可以節約通信成本,但其傳輸速度比並行傳輸低。
串口是計算機上一種非常通用的設備通信協議。大多數計算機(不包括筆記本電腦)包含兩個基於RS-232的串口。串口同時也是儀器儀表設備通用的通信協議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協議也可以用於獲取遠程採集設備的數據。

㈥ 求各位大神幫忙,本人想通過Android的藍牙讀取藍牙串口的數據,並在一個TextView上顯示該怎麼做

這個我們襪拆前之前也做過,不過沒有demo,我們都做成公司的產品了。首先你要去了解android的藍牙api,以及手機與手機之間的,通信,然後告清你御冊要做硬體和android通信,需要做一些小的變動,主要變動就是在數據流處理的地方,就不要用android的API了,就自己從最簡單的數據流進行處理吧。我們就是這么做出來的。

㈦ (藍牙串口)Bluetooth Serial

該插件可以通過藍牙進行串列通信。 它是為了在Android或iOS和Arino之間進行通信而編寫的。
Repo(備用): https://github.com/don/BluetoothSerial

1.安裝Cordova和Ionic原生插件:

2. 添加插件到app's mole

Android
iOS
Windows Phone 8

connect(macAddress_or_uuid)

Platforms:****ANDROID IOS WINDOWS PHONE
連接到藍牙設備

****Returns:** Observable<any>
連接訂閱,斷開連接取消訂閱。

connectInsecure(macAddress)

Platforms:****ANDROID
藍牙設備不安全地連接

****Returns:** Observable<any>
連接訂閱,斷開連接取消訂閱。

disconnect()

斷開連接的設備
****Returns:** Promise<any>

write(data)

Platforms:****ANDROID IOS WINDOWS PHONE
將數據寫入串口

****Returns:** Promise<any>
當數據寫入時返回promise

available()

Platforms:****ANDROID IOS WINDOWS PHONE
獲取可用數據的位元組數
****Returns:** Promise<any>
返回包含可用位元組的promise

read()

Platforms:****ANDROID IOS WINDOWS PHONE
從緩沖區讀取數據
****Returns:** Promise<any>
從緩沖區返回數據的promise

readUntil(delimiter)

Platforms:****ANDROID IOS WINDOWS PHONE
從緩沖區讀取數據,直到達到定界符

****Returns:** Promise<any>
returns a promise

subscribe(delimiter)

Platforms:****ANDROID IOS WINDOWS PHONE
訂閱收到數據時收到通知

****Returns:** Observable<any>
返回一個observable.

subscribeRawData()

Platforms:****ANDROID IOS WINDOWS PHONE
訂閱收到數據時收到通知
****Returns:** Observable<any>
返回一個observable

clear()

Platforms:****ANDROID IOS WINDOWS PHONE
清除緩沖區中的數據
****Returns:** Promise<any>
完成後返回promise

list()

Platforms:****ANDROID IOS WINDOWS PHONE
列出綁定設備
****Returns:** Promise<any>
返回一個promise

isEnabled()

Platforms:****ANDROID IOS WINDOWS PHONE
報告藍牙是否啟用
****Returns:** Promise<any>
返回一個promise

isConnected()

Platforms:****ANDROID IOS WINDOWS PHONE
報告連接狀態
****Returns:** Promise<any>
返回一個promise

readRSSI()

Platforms:****ANDROID IOS WINDOWS PHONE
從連接的外圍設備讀取RSSI
****Returns:** Promise<any>
返回一個promise

showBluetoothSettings()

Platforms:****ANDROID IOS WINDOWS PHONE
顯示設備上的藍牙設置
****Returns:** Promise<any>
返回一個promise

enable()

Platforms:****ANDROID IOS WINDOWS PHONE
在設備上啟用藍牙
****Returns:** Promise<any>
返回一個 promise

discoverUnpaired()

Platforms:****ANDROID IOS WINDOWS PHONE
發現不配對的設備
****Returns:** Promise<any>
返回一個promise

setDeviceDiscoveredListener()

Platforms:****ANDROID IOS WINDOWS PHONE
訂閱藍牙設備發現通知。 發現過程必須通過discoverUnpaired 來啟動功能。
****Returns:** Observable<any>
返回一個 observable

setName(newName)

Platforms:****ANDROID
設置廣播到其他設備的可讀設備名稱

setDiscoverable(discoverableDuration)

Platforms:****ANDROID
使設備可以被其他設備發現

㈧ android藍牙串口通訊助手怎麼用

藍牙客戶端通信工具(即:藍牙從機模式),可進行藍牙串口通信測試。能連接單片機及PC的藍牙串口。

手機藍牙串口助手是一個J2ME程序,可以運行在支持藍牙和J2ME的手機上,通過藍牙轉串口模塊的配合使用,可以在手機上控制串口設備,例如modem、LCD顯示屏。

簡單說,你不必太在意這個工具,是開發人員工具,用來讓你手機與其他IT設備連接通訊用的。

當你電腦需要通過藍牙控制 手機 打電話,發簡訊,用到的就是藍牙串口(com)通道。你手機可以通過藍牙關關電腦,也是用的藍牙串口通道。

不用太在意,這些功能用專門軟體實現比較好,不需要在開發。

閱讀全文

與android藍牙串口通訊相關的資料

熱點內容
c傳遞指針到python 瀏覽:160
手動添加引導的命令 瀏覽:52
740伺服器小藍條是做什麼的 瀏覽:520
linux文件操作命令 瀏覽:125
安卓手機圖片文件夾加鎖 瀏覽:778
steam提示音在哪個文件夾 瀏覽:337
項目開發全程實錄pdf 瀏覽:530
單片機reset 瀏覽:595
pdf怎麼是英文 瀏覽:969
旗雲2壓縮機保險 瀏覽:374
做程序員壓力大嗎表情包 瀏覽:312
pdf下拉 瀏覽:371
php去掉小數後面的0 瀏覽:954
阿里備案買什麼伺服器 瀏覽:261
網路驅動下載到哪個文件夾 瀏覽:481
達內程序員培訓西安 瀏覽:505
人保送車主惠app上怎麼年檢 瀏覽:604
android手機開機密碼 瀏覽:481
linux查看某個進程命令 瀏覽:530
閑置的騰訊雲伺服器 瀏覽:439