久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android 藍(lán)牙開發(fā)基本流程

 流浪的星星318 2017-06-03

此例子基于 Android demo

對(duì)于一般的軟件開發(fā)人員來(lái)說(shuō),藍(lán)牙是很少用到的,,尤其是Android的藍(lán)牙開發(fā),,國(guó)內(nèi)的例子很少     Android對(duì)于藍(lán)牙開發(fā)從2.0版本的sdk才開始支持,而且模擬器不支持,,測(cè)試至少需要兩部手機(jī),,所以制約了很多技術(shù)人員的開發(fā);
    鑒于很多開發(fā)人員現(xiàn)在也有藍(lán)牙開發(fā)的需求,,也為了大家少走些彎路,,先將我積攢的一點(diǎn)點(diǎn)在Android藍(lán)牙開發(fā)經(jīng)驗(yàn)與大家分享一下!

   首先,,要操作藍(lán)牙,,先要在AndroidManifest.xml里加入權(quán)限

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

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


然后,看下api,,Android所有關(guān)于藍(lán)牙開發(fā)的類都在android.bluetooth包下,,如下圖,只有8個(gè)類

                1.jpg
而我們需要用到了就只有幾個(gè)而已:

    1.BluetoothAdapter 

顧名思義,,藍(lán)牙適配器,直到我們建立bluetoothSocket連接之前,,都要不斷操作它BluetoothAdapter里的方法很多,,常用的有以下幾個(gè):

      cancelDiscovery() 根據(jù)字面意思,是取消發(fā)現(xiàn),,也就是說(shuō)當(dāng)我們正在搜索設(shè)備的時(shí)候調(diào)用這個(gè)方法將不再繼續(xù)搜索

      disable()關(guān)閉藍(lán)牙

      enable()打開藍(lán)牙,,這個(gè)方法打開藍(lán)牙不會(huì)彈出提示,更多的時(shí)候我們需要問(wèn)下用戶是否打開,,一下這兩行代碼同樣是打開藍(lán)牙,,不過(guò)會(huì)提示用戶

Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

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

      getAddress()獲取本地藍(lán)牙地址

      getDefaultAdapter()獲取默認(rèn)BluetoothAdapter,實(shí)際上,,也只有這一種方法獲取BluetoothAdapter

      getName()獲取本地藍(lán)牙名稱

      getRemoteDevice(String address)根據(jù)藍(lán)牙地址獲取遠(yuǎn)程藍(lán)牙設(shè)備

      getState()獲取本地藍(lán)牙適配器當(dāng)前狀態(tài)(感覺(jué)可能調(diào)試的時(shí)候更需要)

      isDiscovering()判斷當(dāng)前是否正在查找設(shè)備,,是返回true

      isEnabled()判斷藍(lán)牙是否打開,,已打開返回true,否則,,返回false

     listenUsingRfcommWithServiceRecord(String name,UUID uuid)根據(jù)名稱,,UUID創(chuàng)建并返回BluetoothServerSocket,這是創(chuàng)建BluetoothSocket服務(wù)器端的第一步

      startDiscovery()開始搜索,,這是搜索的第一步

2.BluetoothDevice

看名字就知道,,這個(gè)類描述了一個(gè)藍(lán)牙設(shè)備

      createRfcommSocketToServiceRecord(UUIDuuid)根據(jù)UUID創(chuàng)建并返回一個(gè)BluetoothSocket

getState() 藍(lán)牙狀態(tài)這里要說(shuō)一下,只有在 BluetoothAdapter.STATE_ON 狀態(tài)下才可以監(jiān)聽,,具體可以看andrid api;

這個(gè)方法也是我們獲取BluetoothDevice的目的——?jiǎng)?chuàng)建BluetoothSocket
這個(gè)類其他的方法,,如getAddress(),getName(),同BluetoothAdapter

    3.BluetoothServerSocket

如果去除了Bluetooth相信大家一定再熟悉不過(guò)了,既然是Socket,,方法就應(yīng)該都差不多,,這個(gè)類一種只有三個(gè)方法兩個(gè)重載的accept(),accept(inttimeout)兩者的區(qū)別在于后面的方法指定了過(guò)時(shí)時(shí)間,需要注意的是,,執(zhí)行這兩個(gè)方法的時(shí)候,,直到接收到了客戶端的請(qǐng)求(或是過(guò)期之后),都會(huì)阻塞線程,,應(yīng)該放在新線程里運(yùn)行,!


還有一點(diǎn)需要注意的是,這兩個(gè)方法都返回一個(gè)BluetoothSocket,,最后的連接也是服務(wù)器端與客戶端的兩個(gè)BluetoothSocket的連接

      close()這個(gè)就不用說(shuō)了吧,,翻譯一下——關(guān)閉!

 4.BluetoothSocket

  跟BluetoothServerSocket相對(duì),,是客戶端一共5個(gè)方法,,不出意外,都會(huì)用到

      close(),關(guān)閉

      connect()連接

      getInptuStream()獲取輸入流

      getOutputStream()獲取輸出流

      getRemoteDevice()獲取遠(yuǎn)程設(shè)備,,這里指的是獲取bluetoothSocket指定連接的那個(gè)遠(yuǎn)程藍(lán)牙設(shè)備


1,、獲取本地藍(lán)牙適配器

      BluetoothAdapter
mAdapter= BluetoothAdapter.getDefaultAdapter();

 2、打開藍(lán)牙

      if(!mAdapter.isEnabled()){

//彈出對(duì)話框提示用戶是后打開

Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enabler, REQUEST_ENABLE);

      //不做提示,,強(qiáng)行打開

      // mAdapter.enable();

}

3,、搜索設(shè)備
   1)
剛才說(shuō)過(guò)了mAdapter.startDiscovery()

是第一步,可以你會(huì)發(fā)現(xiàn)沒(méi)有返回的藍(lán)牙設(shè)備,怎么知道查找到了呢,?向下看,,不要急

2)定義BroadcastReceiver,關(guān)于BroadcastReceiver不多講了,不是今天的討論內(nèi)容,,代碼如下

  1. BroadcastReceiver mReceiver = new BroadcastReceiver() {  
  2.     public void onReceive(Context context, Intent intent) {  
  3.         String action = intent.getAction();  
  4.         //找到設(shè)備  
  5.         if (BluetoothDevice.ACTION_FOUND.equals(action)) {  
  6.             BluetoothDevice device = intent  
  7.                     .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  
  8.   
  9.             if (device.getBondState() != BluetoothDevice.BOND_BONDED) {  
  10.   
  11.                 Log.v(TAG, "find device:" + device.getName()  
  12.                         + device.getAddress());  
  13.             }  
  14.         }  
  15.         //搜索完成  
  16.         else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED  
  17.                 .equals(action)) {  
  18.             setTitle("搜索完成");  
  19.             if (mNewDevicesAdapter.getCount() == 0) {  
  20.                 Log.v(TAG, "find over");  
  21.             }  
  22.         }  
  23.     }  
  24. };  
  這樣,,沒(méi)當(dāng)查找到新設(shè)備或是搜索完成,相應(yīng)的操作都在上段代碼的兩個(gè)if里執(zhí)行了,不過(guò)前提是你要先注冊(cè)

BroadcastReceiver,,具體代碼如下

  1. IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);  
  2. registerReceiver(mReceiver, filter);  
  3. filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);  
  4. registerReceiver(mReceiver, filter)<span style="font-family:SimSun;">;</span>  

(這段代碼,,一般寫在onCreate()里..)

  4、建立連接,,首先Android sdk(2.0以上版本)支持的藍(lán)牙連接是通過(guò)BluetoothSocket建立連接(說(shuō)的不對(duì)請(qǐng)高人指正),,服務(wù)器端(BluetoothServerSocket)和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,,因?yàn)榻⑦B接的方法會(huì)阻塞線程,,所以服務(wù)器端和客戶端都應(yīng)啟動(dòng)新線程連接

1)服務(wù)器端:


//UUID
格式一般是"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"可到

        //http://www. 申請(qǐng)


BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord(serverSocketName,UUID);
serverSocket.accept();


2)
客戶端:
//
還記得我們剛才在BroadcastReceiver獲取了BLuetoothDevice么?
BluetoothSocket clienSocket=dcvice. createRfcommSocketToServiceRecord(UUID);
clienSocket.connect();


5
,、數(shù)據(jù)傳遞,,通過(guò)以上操作,就已經(jīng)建立的BluetoothSocket連接了,,數(shù)據(jù)傳遞無(wú)非是通過(guò)流的形式
1
)獲取流
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();

2)寫出,、讀入
這是基礎(chǔ)的東西,在這就不多贅述了
終于寫完了,,這是我這兩天的學(xué)習(xí)經(jīng)驗(yàn),,希望對(duì)有藍(lán)牙需求的朋友有所幫助!另外,,之前我們提過(guò)

android.bluetooth下有8個(gè)類,,還有4個(gè)類沒(méi)有用到,那4個(gè)類里定義的都是常量,,我也沒(méi)用到它們..


   最后把我找到的幾個(gè)藍(lán)牙的例子附在后面,,希望從事軟件開發(fā),尤其是Android開發(fā)的朋友以后多溝通,、多分享,!

補(bǔ)充一下,使設(shè)備能夠被搜索

Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

startActivityForResult(enabler,REQUEST_DISCOVERABLE);


demo是包括客戶端和服務(wù)端,;分別放到兩個(gè)手機(jī)上就可以通信,;大家改改應(yīng)該就可以用;

http://download.csdn.NET/detail/q610098308/8681065
這個(gè)是官方的demo:
http://download.csdn.Net/detail/q610098308/8628675

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多