藍芽許可權
為了在你的應用程式中使用藍芽功能,至少要聲明兩個藍芽許可權(BLUETOOTH和BLUETOOTH_ADMIN)中的一個。
為了執行任何藍芽通訊(如請求串連、接收串連和傳輸資料),你必須申請BLUETOOTH許可權。
為了啟動裝置發現或維護藍芽設定,你必須申請BLUETOOTH_ADMIN許可權。大多數需要這個許可權的應用程式,僅僅是為能夠發現本地的藍牙裝置。這個許可權所授予的其他能力應該不被使用,除非是電源管理的應用程式,它會在依據使用者的請求來修改藍芽設定。注意:如果你使用了BLUETOOTH_ADMIN許可權,那麼必須要有BLUETOOTH許可權。
在你的應用程式資訊清單檔案中聲明藍芽許可權,例如:
<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
...
</manifest>
關於聲明應用程式許可權的更多資訊,請參閱<uses-permission>
設定藍芽
在應用程式能夠利用藍芽通道通訊之前,需要確認裝置是否支援藍芽通訊,如果支援,要確保它是可用的。
如果不支援藍芽,那麼你應該有好的禁用所有藍芽功能。如果支援藍芽,但是被禁用的,那麼你要在不離開你的應用程式的情況下,請求使用者啟用藍芽功能,這種設定要使用BluetoothAdapter對象,在以下兩個步驟中完成。
1. 獲得BluetoothAdapter對象
BluetoothAdapter對象是所有藍芽活動都需要的,要獲得這個對象,就要調用靜態getDefaultAdapter()方法。這個方法會返回一個代表裝置自己的藍芽適配器的BluetoothAdapter對象。整個系統有一個藍芽適配器,你的應用程式能夠使用這個對象來進行互動。如果getDefaultAdapter()方法返回null,那麼該裝置不支援藍芽,你的處理也要在此結束。例如:
BluetoothAdapter mBluetoothAdapter =BluetoothAdapter.getDefaultAdapter();if(mBluetoothAdapter ==null){// Device does not support Bluetooth}2. 啟用藍芽功能
接下來,你需要確保藍芽是可用的。調用isEnabled()方法來檢查當前藍芽是否可用。如果這個方法返回false,那麼藍芽是被禁用的。要申請啟用藍芽功能,就要調用帶有ACTION_REQUEST_ENABLE操作意圖的startActivityForResult()方法。它會給系統設定發一個啟用藍芽功能的請求(不終止你的應用程式)。例如:
if(!mBluetoothAdapter.isEnabled()){ Intent enableBtIntent =newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}
這時會顯示一個請求使用者啟用藍芽功能的對話方塊,1所示:
圖1.啟用藍芽功能的對話方塊。
如果使用者響應“Yes”,那麼系統會開始啟用藍芽功能,完成啟動過程(有可能失敗),焦點會返回給你的應用程式。
傳遞給startActivityForResult()方法的REQUEST_ENABLE_BT常量,是一個你的應用程式中定義的整數(它必須大於0),系統會把它作為requestCode參數返回到你的onActivityResult()回調實現中。
如果藍芽功能啟用成功,你的Activity會在onActivityResult()回調中接收到RESULT_OK結果,如果藍芽沒有被啟動(或者使用者響應了“No”),那麼該結果編碼是RESULT_CANCELED。
可選地,你的應用程式還可以監聽ACTION_STATE_CHANGED廣播Intent,無論藍芽狀態何時改變,系統都會廣播這個Intent。這個廣播包含的附加欄位EXTRA_STATE和EXTRA_PREVIOUS_STATE中分別指明了新的和舊的藍芽狀態。這些附加欄位中可能的值是:STATE_TURNING_ON、STATE_ON、STATE_TURNING_OFF和STATE_OFF。監聽這個廣播對於在應用程式運行時檢測藍芽的狀態是有用的。
提示:啟用可發現能力會自動啟動藍芽功能。如果你計劃在執行藍芽活動之前,要始終啟用裝置的可發現機制,就可以跳過上面的第2步,詳細請參閱下文“啟用藍芽可發現”。