當前位置:首頁 » 安卓系統 » android判斷藍牙連接

android判斷藍牙連接

發布時間: 2022-05-24 08:12:35

A. Android怎麼檢測藍牙的連接狀態如果一段斷開,我這邊怎麼檢測得到

按照藍牙規范,一旦超時連接斷開,會返回上層Disconnect complete Event with reason code: supervision timeout.可以根據該原因碼,檢測連接狀態,具體方法為:
1、BluetoothAdapter 顧名思義,藍牙適配器,直到建立bluetoothSocket連接之前,都要不斷操作它BluetoothAdapter里的方法很多,常用的有以下幾個:cancelDiscovery() 根據字面意思,是取消發現,也就是說當正在搜索設備的時候調用這個方法將不再繼續搜索disable()關閉藍牙enable()打開藍牙,這個方法打開藍牙不會彈出提示,更多的時候需要問下用戶是否打開,一下這兩行代碼同樣是打開藍牙,不過會提示用戶:Intemtenabler=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);

getAddress()獲取本地藍牙地址getDefaultAdapter()獲取默認BluetoothAdapter,實際上,也只有這一種方法獲取BluetoothAdaptergetName()獲取本地藍牙名稱。
2、getRemoteDevice(String address)根據藍牙地址獲取遠程藍牙設備getState()獲取本地藍牙適配器當前狀態(感覺可能調試的時候更需要)isDiscovering()判斷當前是否正在查找設備,是返回true***isEnabled()判斷藍牙是否打開,已打開返回true,否則,返回false***(String name,UUID uuid)根據名稱,UUID創建並返回BluetoothServerSocket,這是創建BluetoothSocket伺服器端的第一步startDiscovery()開始搜索,這是搜索的第一步2.BluetoothDevice看名字就知道,這個類描述了一個藍牙設備(UUIDuuid)根據UUID創建並返回一個BluetoothSocket這個方法也是我們獲取BluetoothDevice的目的——創建BluetoothSocket

這個類其他的方法,如getAddress(),getName(),同BluetoothAdapter。

B. 哪位清楚android判斷藍牙是否連接

設置——打開藍牙,看你連接了誰,下面會有已連接

C. android 怎麼判斷連接了那個藍牙耳機

ba = BluetoothAdapter.getDefaultAdapter();// int isBlueCon;//藍牙適配器是否存在,即是否發生了錯誤 if (ba == null){// isBlueCon = -1; //error return -1; } else if(ba.isEnabled()) { int a2dp = ba.getProfileConnectionState(BluetoothProfile.A2DP); //可操控藍牙設備,如帶播放暫停功能的藍牙耳機 int headset = ba.getProfileConnectionState(BluetoothProfile.HEADSET); //藍牙頭戴式耳機,支持語音輸入輸出 int health = ba.getProfileConnectionState(BluetoothProfile.HEALTH); //藍牙穿戴式設備

D. android 怎麼判斷藍牙連接狀態

在設置——藍牙里,在顯示的藍牙列表裡有已連接或者斷開狀態

E. android 怎麼判斷藍牙配對成功

可以通過mDevice.getBondState()進行判斷是否需要配對;

如下代碼中: (mBluetoothDevice.getBondState()==BluetoothDevice.BOND_NONE表示未配對。可以在調用配對方法之後讀取一下這個狀態來判斷是否已配對成功。)


protectedvoidconnectDevice(){

try{

//連接建立之前的先配對

if(mBluetoothDevice.getBondState()==BluetoothDevice.BOND_NONE){

MethodcreMethod=BluetoothDevice.class

.getMethod("createBond");

Log.e("TAG","開始配對");

creMethod.invoke(mBluetoothDevice);

}else{

}

}catch(Exceptione){

//TODO:handleexception

//DisplayMessage("無法配對!");

e.printStackTrace();

}

mBluetoothAdapter.cancelDiscovery();

try{

socket.connect();

//DisplayMessage("連接成功!");

//connetTime++;

connected=true;

}catch(IOExceptione){

//TODO:handleexception

//DisplayMessage("連接失敗!");

connetTime++;

connected=false;

try{

socket.close();

socket=null;

}catch(IOExceptione2){

//TODO:handleexception

Log.e(TAG,"");

}

}finally{

connecting=false;

}

}


F. 如何實現android藍牙開發 自動配對連接,並不彈出提示框

我就開始查找怎麼關閉這個藍牙配對提示框,後面還是偉大的android源碼幫助了我。
在源碼 BluetoothDevice 類中還有兩個隱藏方法
cancelBondProcess()和cancelPairingUserInput()
這兩個方法一個是取消配對進程一個是取消用戶輸入
下面是自動配對的代碼
Mainfest,xml注冊

<receiverandroid:name=".">

<intent-filter>

<actionandroid:name="android.bluetooth.device.action.PAIRING_REQUEST"/>

</intent-filter>

</receiver>

自己在收到廣播時處理並將預先輸入的密碼設置進去

java">
{

StringstrPsw="0";

@Override
publicvoidonReceive(Contextcontext,Intentintent)
{
//TODOAuto-generatedmethodstub
if(intent.getAction().equals(
"android.bluetooth.device.action.PAIRING_REQUEST"))
{
BluetoothDevicebtDevice=intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

//byte[]pinBytes=BluetoothDevice.convertPinToBytes("1234");
//device.setPin(pinBytes);
Log.i("tag11111","ddd");
try
{
ClsUtils.setPin(btDevice.getClass(),btDevice,strPsw);//手機和藍牙採集器配對
ClsUtils.createBond(btDevice.getClass(),btDevice);
ClsUtils.cancelPairingUserInput(btDevice.getClass(),btDevice);
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}


}
}
<b>/************************************藍牙配對函數***************/
importjava.lang.reflect.Field;
importjava.lang.reflect.Method;

importandroid.bluetooth.BluetoothDevice;
importandroid.util.Log;
publicclassClsUtils
{

/**
*與設備配對參考源碼:platform/packages/apps/Settings.git
*/Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
*/
staticpublicbooleancreateBond(ClassbtClass,BluetoothDevicebtDevice)
throwsException
{
MethodcreateBondMethod=btClass.getMethod("createBond");
BooleanreturnValue=(Boolean)createBondMethod.invoke(btDevice);
returnreturnValue.booleanValue();
}

/**
*與設備解除配對參考源碼:platform/packages/apps/Settings.git
*/Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
*/
staticpublicbooleanremoveBond(ClassbtClass,BluetoothDevicebtDevice)
throwsException
{
MethodremoveBondMethod=btClass.getMethod("removeBond");
BooleanreturnValue=(Boolean)removeBondMethod.invoke(btDevice);
returnreturnValue.booleanValue();
}

staticpublicbooleansetPin(ClassbtClass,BluetoothDevicebtDevice,
Stringstr)throwsException
{
try
{
MethodremoveBondMethod=btClass.getDeclaredMethod("setPin",
newClass[]
{byte[].class});
BooleanreturnValue=(Boolean)removeBondMethod.invoke(btDevice,
newObject[]
{str.getBytes()});
Log.e("returnValue",""+returnValue);
}
catch(SecurityExceptione)
{
//thrownewRuntimeException(e.getMessage());
e.printStackTrace();
}
catch(IllegalArgumentExceptione)
{
//thrownewRuntimeException(e.getMessage());
e.printStackTrace();
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returntrue;

}

//取消用戶輸入
(ClassbtClass,
BluetoothDevicedevice)

throwsException
{
MethodcreateBondMethod=btClass.getMethod("cancelPairingUserInput");
//cancelBondProcess()
BooleanreturnValue=(Boolean)createBondMethod.invoke(device);
returnreturnValue.booleanValue();
}

//取消配對
(ClassbtClass,
BluetoothDevicedevice)

throwsException
{
MethodcreateBondMethod=btClass.getMethod("cancelBondProcess");
BooleanreturnValue=(Boolean)createBondMethod.invoke(device);
returnreturnValue.booleanValue();
}

/**
*
*@paramclsShow
*/
(ClassclsShow)
{
try
{
//取得所有方法
Method[]hideMethod=clsShow.getMethods();
inti=0;
for(;i<hideMethod.length;i++)
{
Log.e("methodname",hideMethod[i].getName()+";andtheiis:"
+i);
}
//取得所有常量
Field[]allFields=clsShow.getFields();
for(i=0;i<allFields.length;i++)
{
Log.e("Fieldname",allFields[i].getName());
}
}
catch(SecurityExceptione)
{
//thrownewRuntimeException(e.getMessage());
e.printStackTrace();
}
catch(IllegalArgumentExceptione)
{
//thrownewRuntimeException(e.getMessage());
e.printStackTrace();
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}</b>
執行時直接使用:
<b>publicstaticbooleanpair(StringstrAddr,StringstrPsw)
{
booleanresult=false;
=BluetoothAdapter
.getDefaultAdapter();

bluetoothAdapter.cancelDiscovery();

if(!bluetoothAdapter.isEnabled())
{
bluetoothAdapter.enable();
}

if(!BluetoothAdapter.checkBluetoothAddress(strAddr))
{//檢查藍牙地址是否有效

Log.d("mylog","devAdneffient!");
}

BluetoothDevicedevice=bluetoothAdapter.getRemoteDevice(strAddr);

if(device.getBondState()!=BluetoothDevice.BOND_BONDED)
{
try
{
Log.d("mylog","NOTBOND_BONDED");
ClsUtils.setPin(device.getClass(),device,strPsw);//手機和藍牙採集器配對
ClsUtils.createBond(device.getClass(),device);
remoteDevice=device;//配對完畢就把這個設備對象傳給全局的remoteDevice
result=true;
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock

Log.d("mylog","setPiNfailed!");
e.printStackTrace();
}//

}
else
{
Log.d("mylog","HASBOND_BONDED");
try
{
ClsUtils.createBond(device.getClass(),device);
ClsUtils.setPin(device.getClass(),device,strPsw);//手機和藍牙採集器配對
ClsUtils.createBond(device.getClass(),device);
remoteDevice=device;//如果綁定成功,就直接把這個設備對象傳給全局的remoteDevice
result=true;
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
Log.d("mylog","setPiNfailed!");
e.printStackTrace();
}
}
returnresult;
}</b>

G. 這段 安卓軟體中的代碼中如何判斷 手機是否連接到 藍牙設備

安卓藍牙中。要連接其他設備要調用connect()函數。。此函數你可以去看一下,官方說的是:若連接成功,就不會產生異常。不成功,就會產生異常。。。所以看看程序會運行異常不。運行了,說明沒有連接成功。沒運行,則連接成功了。
try {
// 連接
connect(device);
} catch (IOException e) {
Toast.makeText(MainActivity.this, "沒有成功連接設備", //1
Toast.LENGTH_SHORT).show();
}

若成功了,不會運行1,不成功,就會產生異常。運行異常中的程序,也就是代碼1.

H. Android藍牙怎麼檢測連接狀態

首先,要操作藍牙,先要在AndroidManifest.xml里加入許可權

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permissionandroid:name="android.permission.BLUETOOTH" />

然後,看下api,Android所有關於藍牙開發的類都在android.bluetooth包下,如下圖,只有8個類

而我們需要用到了就只有幾個而已:

1.BluetoothAdapter 顧名思義,藍牙適配器,直到我們建立bluetoothSocket連接之前,都要不斷操作它BluetoothAdapter里的方法很多,常用的有以下幾個:cancelDiscovery() 根據字面意思,是取消發現,也就是說當我們正在搜索設備的時候調用這個方法將不再繼續搜索disable()關閉藍牙enable()打開藍牙,這個方法打開藍牙不會彈出提示,更多的時候我們需要問下用戶是否打開,一下這兩行代碼同樣是打開藍牙,不過會提示用戶:Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enabler,reCode);//同startActivity(enabler);

getAddress()獲取本地藍牙地址getDefaultAdapter()獲取默認BluetoothAdapter,實際上,也只有這一種方法獲取BluetoothAdaptergetName()獲取本地藍牙名稱getRemoteDevice(String address)根據藍牙地址獲取遠程藍牙設備getState()獲取本地藍牙適配器當前狀態(感覺可能調試的時候更需要)isDiscovering()判斷當前是否正在查找設備,是返回true***isEnabled()判斷藍牙是否打開,已打開返回true,否則,返回false***(String name,UUID uuid)根據名稱,UUID創建並返回BluetoothServerSocket,這是創建BluetoothSocket伺服器端的第一步startDiscovery()開始搜索,這是搜索的第一步2.BluetoothDevice看名字就知道,這個類描述了一個藍牙設備(UUIDuuid)根據UUID創建並返回一個BluetoothSocket這個方法也是我們獲取BluetoothDevice的目的——創建BluetoothSocket

這個類其他的方法,如getAddress(),getName(),同BluetoothAdapter

3.BluetoothServerSocket如果去除了Bluetooth相信大家一定再熟悉不過了,既然是Socket,方法就應該都差不多,這個類一種只有三個方法

兩個重載的accept(),accept(inttimeout)兩者的區別在於後面的方法指定了過時時間,需要注意的是,執行這兩個方法的時候,直到接收到了客戶端的請求(或是過期之後),都會阻塞線程,應該放在新線程里運行!

還有一點需要注意的是,這兩個方法都返回一個BluetoothSocket,最後的連接也是伺服器端與客戶端的兩個BluetoothSocket的連接

close()這個就不用說了吧,翻譯一下——關閉!4.BluetoothSocket,跟BluetoothServerSocket相對,是客戶端一共5個方法,不出意外,都會用到

close(),關閉connect()連接getInptuStream()獲取輸入流getOutputStream()獲取輸出流getRemoteDevice()獲取遠程設備,這里指的是獲取bluetoothSocket指定連接的那個遠程藍牙設備

I. android怎麼來判斷藍牙開、關的狀態求代碼

Android 藍牙編程的基本步驟:

  1. 獲取藍牙適配器BluetoothAdapterblueadapter=BluetoothAdapter.getDefaultAdapter();

  2. 如果BluetoothAdapter 為null,說明android手機沒有藍牙模塊。

    判斷藍牙模塊是否開啟,blueadapter.isEnabled() true表示已經開啟,false表示藍牙並沒啟用。

  3. 啟動配置藍牙可見模式,即進入可配對模式Intentin=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

    in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);

    startActivity(in); ,200就表示200秒。

  4. 獲取藍牙適配器中已經配對的設備Set<BluetoothDevice>device=blueadapter.getBondedDevices();

  5. 還需要在androidManifest.xml中聲明藍牙的許可權

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


接下來就是根據自己的需求對BluetoothAdapter的操作了。

J. syu android藍牙連接方法

syu android藍牙連接方法先展示代碼結構。

藍牙是一種無線數據與語音通信的開放性全球規范,它以低成本的短距離無線連接為基礎,可為固定的或移動的終端設備提供廉價的接入服務。

藍牙(Bluetooth)是一項短途無線電連接系統,它可以將不同的電子器材連系起來。原理就好像收音機一樣,裝有藍牙的電子器材,可以接收外來的訊息,從而進行特定的指令。

藍牙簡介:

不過,藍牙不但可以接收,也都可以「傳送」,因此裝有藍牙的電子器材,能夠互相溝通。現在,大部分的電腦配件,如列印機、熒幕等,都要接駁上電線,才可以互傳訊息,但藍牙透過其短途的接收系統,便可以使這些配件在沒有駁線下,仍然能夠傳送指令,做到真正「無線」的世界。

頭藍技術實質內容是為固定設備或移動設備之間的通信環境建立通用的近距無線介面,將通信技術與計算機技術進一步結合起來,使各種設備在沒有電線或電纜相互連接的情況下,能在近距離范圍內實現相互通信或操作。藍牙功能可以參考下面的操作打開使用,打開其他設備的藍牙。

並使其對其他設備可見,打開下拉頂簾,點擊藍牙圖標使其變為綠色,跳出提示框,勾選對其他設備可見。點擊掃描,搜索到其他設備後,點擊該設備名稱,雙方點確定後配對成功。選擇要傳輸的文件,共享通過藍牙即可傳輸文件。

熱點內容
腳本故事梗 發布:2024-05-18 18:29:02 瀏覽:822
安卓和csharp哪個發展好 發布:2024-05-18 18:09:30 瀏覽:527
換編程題庫 發布:2024-05-18 18:00:58 瀏覽:562
如何使用伺服器ip直連網站 發布:2024-05-18 18:00:49 瀏覽:432
三星n7100哪個安卓版本好用 發布:2024-05-18 17:55:41 瀏覽:490
萬國覺醒採集腳本源碼 發布:2024-05-18 17:55:39 瀏覽:947
sqlserver加欄位 發布:2024-05-18 17:54:53 瀏覽:928
安卓手機如何清除應用記錄 發布:2024-05-18 17:31:37 瀏覽:640
查看存儲過程許可權 發布:2024-05-18 17:18:33 瀏覽:192
php類self 發布:2024-05-18 17:15:03 瀏覽:895