[Android]蓝牙bluetooth

首先,在开始前我们需要准备好一部手机而不是模拟器(因为模拟器上没有蓝牙装置),且手机已经打开调试模式并连接到电脑上。文中的本地设备均指我们自己的手机,而远程设备则是指其他的设备(电脑、其他手机或者其他)。
其次,要操作设备上的蓝牙装置,需要在AndroidManifest中声明两个权限:
第一个权限称为“蓝牙管理”,是对蓝牙的可见性设置,扫描装置,关闭等操作所设置的
第二个权限是普通的“蓝牙操作权限”,可以操作对蓝牙的打开,搜索配对设备等操作
<span style="font-size:14px;"><uses-permission android:name="android.permission.BLUETOOTH" >
</uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" >
</uses-permission></span>


通常情况下,我们对蓝牙的操作主要有:开启和关闭蓝牙、搜索周边设备、能被周边设备所发现、获取配对设备、蓝牙设备间的数据传输。


1.蓝牙设备主要分为两部分,一部分为本地设备,另一部分为远程设备。

BluetoothAdapter——本地设备,也就是本地蓝牙适配器。该类主要用来操作蓝牙的基本服务。

比如:初始化设备的可见,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个BluetoothDevice类(远程蓝牙装置),创建一个BluetoothServerSocket类以监听其它设备对本机的连接请求等。

对蓝牙操作首先就需要有一个BluetoothAdapter实例。常用的几个方法如下:
  cancelDiscovery()——取消本地蓝牙设备的搜索操作,如果本地设备正在进行搜索,那么调用该方法后将停止搜索操作。
  disable()——关闭蓝牙设备。
  enable()——直接蓝牙设备,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,下面这两行代码同样是打开蓝牙,不过会提示用户:
                               
<span style="font-size:14px;">    Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enabler,reCode);//同startActivity(enabler);</span>
 
  getAddress()——获取蓝牙设备的MAC地址。
  getDefaultAdapter()——获取本地的蓝牙设备(默认BluetoothAdapter),实际上,也只有这一种方法获取BluetoothAdapter
  getName()——获取本地蓝牙的名称

  getRemoteDevice(String address)——根据远程设备的MAC地址来获取远程设备。 功能:以给定的MAC地址去创建一个 BluetoothDevice 类实例(代表远程蓝牙实例)。即使该蓝牙地址不可见,也会产生一个BluetoothDevice 类实例。 返回BluetoothDevice 类实例 。注意,如果该蓝牙设备MAC地址不能被识别,其蓝牙Name为null。 异常:如果MAC  address无效,抛出IllegalArgumentException。

       isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false 
       listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServer Socket,这是创建BluetoothSocket服务器端的第一步
   startDiscovery()——蓝牙设备开始搜索周边设备

BuletoothDevice——远程设备。它所包含的方法和BluetoothAdapter一样,不再累述。

下图是DEMO界面


MainActivity.java代码:

package com.example.mybluetooth;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	private Button open_btn1;
	private Button open_btn2;
	private Button close_btn;
	private Button getmac_btn;
	private Button getname_btn;
	private Button search_btn;
	private Button isenabled_btn;
	private Button discoverable_btn;
	private BluetoothAdapter adapter;
	 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		open_btn1 = (Button) findViewById(R.id.open_btn1);
		open_btn2 = (Button) findViewById(R.id.open_btn2);
		close_btn = (Button) findViewById(R.id.close_btn);
		getmac_btn = (Button) findViewById(R.id.getmac_btn);
		getname_btn = (Button) findViewById(R.id.getname_btn);
		search_btn = (Button) findViewById(R.id.search_btn);
		isenabled_btn = (Button) findViewById(R.id.isenabled_btn);
		discoverable_btn = (Button) findViewById(R.id.discoverable_btn);

		open_btn1.setOnClickListener(this);
		open_btn2.setOnClickListener(this);
		close_btn.setOnClickListener(this);
		getmac_btn.setOnClickListener(this);
		getname_btn.setOnClickListener(this);
		search_btn.setOnClickListener(this);
		isenabled_btn.setOnClickListener(this);
		discoverable_btn.setOnClickListener(this);

		adapter = BluetoothAdapter.getDefaultAdapter();

	}

	@Override
	public void onClick(View view) {
		switch (view.getId()) {
		case R.id.open_btn1:
			// 获取本地的蓝牙设备,如果没有则返回null

			if (adapter != null) {
				if (!adapter.isEnabled()) {
					adapter.enable();
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"蓝牙已打开,不需要再打开", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.open_btn2:
			if (adapter != null) {
				if (!adapter.isEnabled()) {
					Intent intent = new Intent(
							BluetoothAdapter.ACTION_REQUEST_ENABLE);
					startActivity(intent);
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"蓝牙已打开,不需要再打开", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.close_btn:
			if (adapter != null) {
				if (adapter.isEnabled()) {
					adapter.disable();
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"蓝牙已关闭,不需要再关闭", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.getmac_btn:
			if (adapter != null) {
				if (adapter.isEnabled()) {
					String mac = adapter.getAddress();
					Toast toast = Toast.makeText(getApplicationContext(), mac,
							Toast.LENGTH_SHORT);
					toast.show();
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"请先打开蓝牙", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.getname_btn:
			if (adapter != null) {
				if (adapter.isEnabled()) {
					String name = adapter.getName();
					Toast toast = Toast.makeText(getApplicationContext(), name,
							Toast.LENGTH_SHORT);
					toast.show();
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"请先打开蓝牙", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.search_btn:
			//下一篇文章待续
			break;
		case R.id.isenabled_btn:
			if (adapter != null) {
				if (adapter.isEnabled()) {
					Toast toast = Toast.makeText(getApplicationContext(),
							"蓝牙已打开", Toast.LENGTH_SHORT);
					toast.show();
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"蓝牙未打开", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		case R.id.discoverable_btn:
			if (adapter != null) {
				if (adapter.isEnabled()) {
					Intent discoverableIntent = new Intent(
							BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
					// 50这个参数代表的是蓝牙设备能在多少秒内被发现
					discoverableIntent.putExtra(
							BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 50);
					startActivity(discoverableIntent);
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"请先打开蓝牙", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
			break;
		}
	}

	 
	 

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值