Android_BlueTooth(蓝牙)

一.BlueTooth简介

1.什么是蓝牙
  (1)Bluetooth是目前使用最广泛的无线通讯协议,近距离无线通讯的标准。传说瑞典有个国王特别爱吃蓝莓导致自己的牙齿天天都是蓝色的,在他执政期间这位国王非常善于交际,能说会到,和邻国的搞得关系非常好,这个Bluetooth的发明者觉得蓝牙它的作用就是在近距离沟通周围的设备,跟这个国王很类似,于是起名叫蓝牙。
  (2)主要针对短距离设备通讯(10米)
  (3)无线耳机,无线鼠标,无线键盘

2.蓝牙工作流程图

   首先两个设备上都要有蓝牙设备或者专业一点叫蓝牙适配器,以手机和电脑为例的流程图。在手机上进行扫描,扫描周围蓝蓝牙设备,先找到手机附近的电脑,然后给它发出一个信号需要进行蓝牙的配对,再次返回一个信号说明手机和电脑已经配对成功了,最后配对成功后可以进行文件传输了。这是一个最基本的一个流程。

Android_BlueTooth(蓝牙)_第1张图片

二.BlueTooth基本知识

1.BlueTooth需要用到的权限

<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
android.permission.BLUETOOTH:使用蓝牙协议的基本权限呢
android.permission.BLUETOOTH_ADMIN:蓝牙协议的高级权限,程序和其他程序进行配对就必须使用这个权限

2.BlueTooth两个基本的API

  BuletoothAdapter:这个类的对象代表了本地的蓝牙适配器,相当于蓝牙工作流程图中的手机里的蓝牙适配器,也就是说比如这个应用程序是运行在手机上,那么手机上的蓝牙适配器就是本地蓝牙适配器。
  BuletoothDevice:这个类的对象代表了远程的蓝牙设备,相当于蓝牙工作流程图中的计算机里的蓝牙适配器,也就是说比如这个应用程序是运行在手机上,那BuletoothDevice代表了你要连接的远程的那个设备上的蓝牙适配器。

3.蓝牙在设备上的可用性

    蓝牙在设备上的可用性是什么呢?就是在应用程序能够利用蓝牙通道通信之前,需要确认设备是否支持蓝牙通信,如果支持,要确保它是可用的。如果不支持蓝牙,那么你应该禁用所有蓝牙功能。如果支持蓝牙,但是被禁用的,那么你要在不离开你的应用程序的情况下,请求用户启用蓝牙功能,这种设置要使用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 =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
   startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
 
 
简单的实例:
运行的界面:
Android_BlueTooth(蓝牙)_第2张图片
主界面代码:
package com.liangdianshui.bluetooth;

import android.app.Activity;
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.view.View;
import android.widget.Toast;

import com.liangdianshui.bluetoothutil.BlueToothController;


public class MainActivity extends Activity {

	private static final int REQUEST_CODE = 0;
	private BlueToothController mBlueToothController = new BlueToothController();
	private Toast mToast;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
		registerReceiver(mReceiver, filter);
	}

	public void isSupportBlueTooth(View view) {
		boolean ret = mBlueToothController.isSupportBlueTooth();
		showToast("support Bluetooth? " + ret);
	}

	public void isBlueToothEnable(View view) {
		boolean ret = mBlueToothController.getBlueToothStatus();
		showToast("Bluetooth Enable?" + ret);
	}

	public void requestTurnOnBlueTooth(View view) {
		mBlueToothController.turnOnBlueTooth(this, REQUEST_CODE);
	}

	public void turnOffBlueTooth(View view) {
		mBlueToothController.turnOffBlueTooth();
	}


	public void showToast(String text) {
		if (mToast != null) {
			mToast.setText(text);
		} else {
			mToast = Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT);
		}
		mToast.show();
	}

	/**
	 * 监听蓝牙开关的广播
	 */
	private BroadcastReceiver mReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
			switch (state) {
				case BluetoothAdapter.STATE_ON:
					showToast("STATE_ON");
					break;
				case BluetoothAdapter.STATE_OFF:
					showToast("STATE_OFF");
					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 onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		//点击开启蓝牙的按钮时,打开请求界面,然后返回用户选择的结果
		if (resultCode == RESULT_OK) {
			showToast("打开蓝牙成功");
		} else {
			showToast("打开蓝牙失败");
		}
	}

	@Override
	protected void onDestroy() {
		unregisterReceiver(mReceiver);
		super.onDestroy();
	}
}
 
  
 

package com.liangdianshui.bluetoothutil;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.util.Log;

/**
 * 蓝牙适配器
 * Created by 两点水 on 2016/3/14.
 */
public class BlueToothController {

	private BluetoothAdapter mBluetoothAdapter;

	public BlueToothController() {
		mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
	}

	/**
	 * 检查机器是否支持蓝牙
	 *
	 * @return true 支持蓝牙 false 不支持蓝牙
	 */
	public boolean isSupportBlueTooth() {
		if (mBluetoothAdapter == null) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 获取当前蓝牙的状态
	 *
	 * @return true 打开  false  关闭
	 */
	public boolean getBlueToothStatus() {
		assert (mBluetoothAdapter != null);//断言
		return mBluetoothAdapter.isEnabled();
	}

	/**
	 * 开启蓝牙
	 *
	 * @param activity
	 * @param requestCode
	 */
	public void turnOnBlueTooth(Activity activity, int requestCode) {
		//官方推荐打开蓝牙的方法
		Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
		activity.startActivityForResult(intent, requestCode);
//		mBluetoothAdapter.enable();
	}

	/**
	 * 关闭蓝牙
	 */
	public void turnOffBlueTooth() {
		mBluetoothAdapter.disable();
	}
}

4.查找蓝牙设备和绑定蓝牙设备



5.蓝牙设备之间的通讯

   蓝牙设备之间的通讯,跟普通的socket之间的通讯差不多!因此,需要一个服务器端和客户端!

(1)创建服务器端的四个步骤

   a.通过   创建

   b.监听accept

   c.处理socket

   d.关闭连接

(2)创建客户端的四个步骤

   a.通过   创建

   b.连接服务器connect

   c.处理socket

   d.关闭连接



你可能感兴趣的:(Android_BlueTooth(蓝牙))