天天看點

Android深入淺出系列之Bluetooth—藍牙操作(一)

  一:什麼是藍牙

    1:Bluetooth是目前使用最廣泛的無線通訊協定,近距離無線通訊的标準。傳說瑞典有個國王特别愛吃藍莓導緻自己的牙齒天天都是藍色的,在他執政期間這位國王非常善于交際,能說會到,和鄰國的搞得關系非常好,這個Bluetooth的發明者覺得藍牙它的作用就是在近距離溝通周圍的裝置,跟這個國王很類似,于是起名叫藍牙。

    2:主要針對短距離裝置通訊(10米)

    3:無線耳機,無線滑鼠,無線鍵盤

    

藍牙标志

  二:藍牙工作流程圖

    首先兩個裝置上都要有藍牙裝置或者專業一點叫藍牙擴充卡,以手機和電腦為例我畫了如下流程圖。其次在手機上進行掃描,掃描周圍藍藍牙裝置,先找到手機附近的電腦,然後給它發出一個信号需要進行藍牙的配對,再次傳回一個信号說明手機和電腦已經配對成功了,最後配對成功後可以進行檔案傳輸了。這是一個最基本的一個流程。

  三:與藍牙相關的最重要的兩個API

    1:BuletoothAdapter

    這個類的對象代表了本地的藍牙擴充卡,相當于藍牙工作流程圖中的手機裡的藍牙擴充卡,也就是說比如這個應用程式是運作在手機上,那麼手機上的藍牙擴充卡就是本地藍牙擴充卡。

    2:BuletoothDevice

    這個類的對象代表了遠端的藍牙裝置,相當于藍牙工作流程圖中的計算機裡的藍牙擴充卡,也就是說比如這個應用程式是運作在手機上,那麼BuletoothDevice代表了你要連接配接的遠端的那個裝置上面的藍牙擴充卡。

  四:硬體準備

    今天這個示例必須運作在具有安卓2.0SDK以上的手機上面,不能運作在模拟器上面,因為現在的模拟器是不能模拟藍牙的,是以必須有個安卓的手機,另外要有台具有藍牙擴充卡的電腦。手機和電腦來進行配對,隻能通過手動來進行,不可能通過代碼是實作配對,因為安全性的問題不能通過應用程式自動的來進行配對,一旦配對成功就可以進行檔案的傳輸了。如何配對在這裡就不講解了。

     五:如何藍牙配對

           本來是要拿手機和電腦作為調試的,但是我的電腦上面沒有藍牙擴充卡,是以就用藍牙筆代替了。

           1:插入手機

            如果發現沒有驅動系統會提示安裝驅動

           2 :下載下傳豌豆莢

           豌豆莢會自動安裝手機對應型号的USB驅動,USB調試預設是打開的(一定要開啟手機的USB調試),等待安裝完成。

Android深入淺出系列之Bluetooth—藍牙操作(一)

          3 :打開在eclipse的DDMS視圖裡的Devices這一區域出現了你的手機裝置的數字名稱了。

         4:打開手機上的“設定”

      5:選擇“無線和網絡”

          給藍牙打上勾,此時手機頭部的藍牙小圖示已打開,表示開啟了藍牙

      6:掃描配對

         拿起藍牙筆,打開它的開關,點選手機上面的“掃描查找裝置”

Android深入淺出系列之Bluetooth—藍牙操作(一)

    7:請求配對       

       輸入密鑰請求配對,然後等待配對成功

   六:實作效果

          掃描已配對的遠端藍牙裝置

          代碼步驟

    1:需要在AndroidMainfest.xml裡聲明藍牙權限

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

    2:獲得BluetoothAdapter對象

    3:判斷目前裝置中是否擁有藍牙裝置

    4:判斷目前裝置中的藍牙裝置是否已經打開

    5:得到所有已經配對的藍牙裝置對象

  七:代碼

    1:布局檔案main.xml

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:orientation="vertical"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent"

       >

    <TextView  

       android:layout_width="fill_parent" 

       android:layout_height="wrap_content" 

       android:text="@string/hello"

      />

      <Button

     android:layout_width="fill_parent"

     android:layout_height="wrap_content"

     android:text="掃描周圍的藍牙裝置"

     android:id="@+id/btn2"

    />

  </LinearLayout>

  2:代碼檔案MainActivity.java

  package com.szy.bluetooth;

  import java.util.Iterator;

  import java.util.Set;

  import android.app.Activity;

  import android.bluetooth.BluetoothAdapter;

  import android.bluetooth.BluetoothDevice;

  import android.content.Intent;

  import android.os.Bundle;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.Button;

    public class MainActivity extends Activity {

      private Button mybutton = null;

      public void onCreate(Bundle savedInstanceState)

      {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.main);

          //得到按鈕

          mybutton = (Button)findViewById(R.id.btn2);

          //綁定監聽器

          mybutton.setOnClickListener(new ButtonListener());

     }

  

  //監聽器匿名類

     private class ButtonListener implements OnClickListener

     {

        public void onClick(View v)

      {

         //得到BluetoothAdapter對象

         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

         //判斷BluetoothAdapter對象是否為空,如果為空,則表明本機沒有藍牙裝置

         if(adapter != null)

         {

            System.out.println("本機擁有藍牙裝置");

            //調用isEnabled()方法判斷目前藍牙裝置是否可用

            if(!adapter.isEnabled())

            {     

               //如果藍牙裝置不可用的話,建立一個intent對象,該對象用于啟動一個Activity,提示使用者啟動藍牙擴充卡

               Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

               startActivity(intent);

            }

            //得到所有已經配對的藍牙擴充卡對象

            Set<BluetoothDevice> devices = adapter.getBondedDevices();

            if(devices.size()>0)    

            {

               //用疊代

               for(Iterator iterator = devices.iterator();iterator.hasNext();)

               {

                  //得到BluetoothDevice對象,也就是說得到配對的藍牙擴充卡

                  BluetoothDevice device = (BluetoothDevice)iterator.next();

                  //得到遠端藍牙裝置的位址

                  Log.d("mytag",device.getAddress());

               }     

          }

       }

       else

       {

          System.out.println("沒有藍牙裝置");

       }

     }           

      }

  }

    八:不連接配接安卓手機效果圖

    因為找不到藍牙裝置是以會在DDMS視圖下的系統資訊裡輸出“沒有藍牙裝置”。

 

    九:調試效果圖

        我們得到了藍牙筆的藍牙擴充卡的位址,我們接下來用MAC位址建立通訊的通道進行檔案的傳輸。

Android深入淺出系列之Bluetooth—藍牙操作(一)

圖十