1.需要的權(quán)限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
第一個權(quán)限是簡單的打開藍牙;第二個權(quán)限是搜索藍牙仰冠、匹配藍牙乏冀、藍牙與藍牙之間傳遞數(shù)據(jù)需要的權(quán)限
2.代碼實例含詳細注釋
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.phonejason.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="手機是否支持藍牙"
android:id="@+id/is_support_blue_tooth"
android:onClick="isSupportBlueTooth" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="藍牙的狀態(tài)"
android:id="@+id/is_blue_tooth_enable"
android:onClick="isBlueToothEnable" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打開藍牙"
android:id="@+id/turn_on_blue_tooth"
android:onClick="requestTurnOnBlueTooth" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="關(guān)閉藍牙"
android:id="@+id/turn_off_blue_tooth"
android:onClick="turnOffBlueTooth" />
</LinearLayout>
藍牙控制器類(BlueToothController)
package com.example.phonejason;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
/**
* Created by 小新 on 2016/6/11.
*/
public class BlueToothController {
//藍牙適配器
private BluetoothAdapter mAdapter;
public BlueToothController() {
//獲取手機的藍牙適配器,如果不為空手機支持藍牙沪停,為空不支持藍牙
mAdapter = BluetoothAdapter.getDefaultAdapter();
}
/**
* 是否支持藍牙
* @return true 支持, false 不支持
*/
public boolean isSupportBlueTooth() {
if( mAdapter != null ){
return true;
}
else {
return false;
}
}
/**
* 判斷當前藍牙狀態(tài)
* @return true 打開,false 關(guān)閉
*/
public boolean getBlueToothStatus() {
//assert斷言:只有為true才會執(zhí)行下去
assert (mAdapter != null);
return mAdapter.isEnabled();
}
/**
* 打開藍牙
* @param activity
* @param requestCode
*/
// 我們一般打開藍牙會使用到系統(tǒng)提供的一個Activity煤辨。這個Activity的action為:
// BluetoothAdapter.ACTION_REQUEST_ENABLE裳涛。
// 然后我們要使用startActivityForResult()這個方法來啟動它木张。
// 這個Activity是有返回值的,如果用戶選擇的是打開端三,我們應(yīng)該可以收到一個RESULT_OK
// 如果用戶選擇的是取消舷礼,我們應(yīng)該可以收到一個RESULT_CANCELED。
public void turnOnBlueTooth(Activity activity, int requestCode) {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivityForResult(intent, requestCode);
// mAdapter.enable();
}
/**
* 關(guān)閉藍牙
*/
public void turnOffBlueTooth() {
mAdapter.disable();
}
}
Mainavtivity
package com.example.phonejason;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//請求碼
public static final int REQUEST_CODE = 0;
private BlueToothController mController = new BlueToothController();
private Toast mToast;
/**
* 監(jiān)聽藍牙開關(guān)的廣播 監(jiān)聽藍牙狀態(tài)的改變
*/
// 當藍牙的狀態(tài)發(fā)生改變時郊闯,系統(tǒng)是會發(fā)出一個為BluetoothAdapter.ACTION_STATE_CHANGED的廣播妻献。
// 該廣播攜帶兩個參數(shù),一個是BluetoothAdapter.EXTRA_PREVIOUS_STATE团赁,表示之前的藍牙狀態(tài)育拨。
// 另一個是BluetoothAdapter.EXTRA_STATE,表示當前的藍牙狀態(tài)欢摄。而它們的值為以下四個:
// BluetoothAdapter.STATE_TURNING_ON;
// BluetoothAdapter.STATE_ON;
// BluetoothAdapter.STATE_TURNING_OFF;
// BluetoothAdapter.STATE_OFF;
// 分別代表熬丧,打開中,已打開怀挠,關(guān)閉中析蝴,已關(guān)閉。
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
switch (state) {
case BluetoothAdapter.STATE_OFF:
showToast("STATE_OFF");
break;
case BluetoothAdapter.STATE_ON:
showToast("STATE_ON");
break;
case BluetoothAdapter.STATE_TURNING_ON:
showToast("STATE_TURNING_ON");
break;
case BluetoothAdapter.STATE_TURNING_OFF:
showToast("STATE_TURNING_OFF");
break;
default:
showToast("Unkown STATE");
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//意圖過濾器
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
//receiver監(jiān)聽filter廣播
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
//注銷廣播
unregisterReceiver(receiver);
super.onDestroy();
}
//是否支持藍牙
public void isSupportBlueTooth(View view) {
boolean ret = mController.isSupportBlueTooth();
showToast("support Bluetooth? " + ret);
}
//藍牙是否能用(打開還是關(guān)閉)
public void isBlueToothEnable(View view) {
boolean ret = mController.getBlueToothStatus();
showToast("Bluetooth enable绿淋?" + ret);
}
//打開藍牙
public void requestTurnOnBlueTooth(View view) {
mController.turnOnBlueTooth(this, REQUEST_CODE);
}
//關(guān)閉藍牙
public void turnOffBlueTooth(View view) {
mController.turnOffBlueTooth();
}
private void showToast(String text) {
if( mToast == null) {
mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
}
else {
mToast.setText(text);
}
mToast.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//當發(fā)起請求藍牙打開事件時闷畸,會告訴你用戶選擇的結(jié)果
if( resultCode == RESULT_OK) {
showToast("打開成功");
}
else {
showToast("打開失敗");
}
}
}