1:Bluetooth是目前使用最廣泛的無線通訊協議,近距離無線通訊的標準。傳說瑞典有個國王特別愛吃藍莓導致自己的牙齒天天都是藍色的,在他執政期間這位國王非常善於交際,能說會到,和鄰國的搞得關係非常好,這個Bluetooth的發明者覺得藍牙它的作用就是在近距離溝通周圍的設備,跟這個國王很類似,於是起名叫藍牙。
2:主要針對短距離設備通訊(10米)
3:無線耳機,無線鼠標,無線鍵盤
二:藍牙工作流程圖
首先兩個設備上都要有藍牙設備或者專業一點叫藍牙適配器,以手機和電腦爲例我畫了如下流程圖。其次在手機上進行掃描,掃描周圍藍藍牙設備,先找到手機附近的電腦,然後給它發出一個信號需要進行藍牙的配對,再次返回一個信號說明手機和電腦已經配對成功了,最後配對成功後可以進行文件傳輸了。這是一個最基本的一個流程。
三:與藍牙相關的最重要的兩個API
1:BuletoothAdapter
這個類的對象代表了本地的藍牙適配器,相當於藍牙工作流程圖中的手機裏的藍牙適配器,也就是說比如這個應用程序是運行在手機上,那麼手機上的藍牙適配器就是本地藍牙適配器。
2:BuletoothDevice
這個類的對象代表了遠程的藍牙設備,相當於藍牙工作流程圖中的計算機裏的藍牙適配器,也就是說比如這個應用程序是運行在手機上,那麼BuletoothDevice代表了你要連接的遠程的那個設備上面的藍牙適配器。
四:硬件準備
今天這個示例必須運行在具有安卓2.0SDK以上的手機上面,不能運行在模擬器上面,因爲現在的模擬器是不能模擬藍牙的,所以必須有個安卓的手機,另外要有臺具有藍牙適配器的電腦。手機和電腦來進行配對,只能通過手動來進行,不可能通過代碼是實現配對,因爲安全性的問題不能通過應用程序自動的來進行配對,一旦配對成功就可以進行文件的傳輸了。如何配對在這裏就不講解了。
五:如何藍牙配對
本來是要拿手機和電腦作爲調試的,但是我的電腦上面沒有藍牙適配器,所以就用藍牙筆代替了。
1:插入手機
如果發現沒有驅動系統會提示安裝驅動
2 :下載豌豆莢
豌豆莢會自動安裝手機對應型號的USB驅動,USB調試默認是打開的(一定要開啓手機的USB調試),等待安裝完成。
3 :打開在eclipse的DDMS視圖裏的Devices這一區域出現了你的手機設備的數字名稱了。
4:打開手機上的“設置”
5:選擇“無線和網絡”
給藍牙打上勾,此時手機頭部的藍牙小圖標已打開,表示開啓了藍牙
6:掃描配對
拿起藍牙筆,打開它的開關,點擊手機上面的“掃描查找設備”
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地址建立通訊的通道進行文件的傳輸。
圖十