android蓝牙模块

新建一个工程“blt”。

-----------------------MainActivity.java

package com.example.blt;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

	static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
	// 适配器
	private BluetoothAdapter blueadapter = null;
	// 设备地址列表
	private List<String> deviceList = new ArrayList<String>();
	private ArrayAdapter<String> adapter;
	private ListView deviceListview;
	private boolean isFind = false;

	// 存储设备信息
	private List<UserDriver> userDrivers = new ArrayList<UserDriver>();

	// 连接设备
	public static BluetoothSocket btSocket;
	int useIndex;

	ProgressDialog pDialog;
	private long exitTime = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		pDialog = new ProgressDialog(MainActivity.this);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setView();
		setBluetooth();

	}

	// 设置列表信息
	private void setView() {

		adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, deviceList);
		deviceListview = (ListView) findViewById(R.id.listView1);
		deviceListview.setAdapter(adapter);
		deviceListview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				useIndex = position;
				// TODO Auto-generated method stub
				new AlertDialog.Builder(MainActivity.this)
						.setTitle("提示框")
						.setMessage(
								"确认连接?"
										+ userDrivers.get(useIndex).DeviceAdapter
												.getName())
						.setPositiveButton("确定",
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										// 判断是否需要配对
										switch (userDrivers.get(useIndex).DeviceAdapter
												.getBondState()) {
										case BluetoothDevice.BOND_BONDING:
											Log.d("BlueToothTestActivity",
													"正在配对......");
											break;
										case BluetoothDevice.BOND_BONDED:
											Log.d("BlueToothTestActivity",
													"完成配对");
											LinkDevice();
											break;
										case BluetoothDevice.BOND_NONE:
											Log.d("BlueToothTestActivity",
													"未配对");
											ApadeDevice();
										default:
											break;
										}
									}
								})
						.setNegativeButton("取消",
								new DialogInterface.OnClickListener() {

									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// TODO Auto-generated method stub

									}
								}).show();
			}
		});

	}

	/**
	 * 第一步,设置蓝牙开启
	 */
	private void setBluetooth() {
		blueadapter = BluetoothAdapter.getDefaultAdapter();

		if (blueadapter != null) { // Device support Bluetooth
			// 确认开启蓝牙
			if (!blueadapter.isEnabled()) {
				// 请求用户开启
				Intent intent = new Intent(
						BluetoothAdapter.ACTION_REQUEST_ENABLE);
				startActivityForResult(intent, RESULT_FIRST_USER);
				// 使蓝牙设备可见,方便配对
				// Intent in = new Intent(
				// BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
				// in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
				// 200);
				// startActivity(in);
				// 直接开启,不经过提示
				blueadapter.enable();
			}
			findAvalibleDevice();
		} else { // Device does not support Bluetooth

			AlertDialog.Builder dialog = new AlertDialog.Builder(this);
			dialog.setTitle("硬件错误");
			dialog.setMessage("未找到蓝牙设备");

			dialog.setNegativeButton("取消",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {

						}
					});
			dialog.show();
		}
	}

	/**
	 * 第二步,搜索设备
	 */
	private void findAvalibleDevice() {
		// 获取可配对蓝牙设备
		Set<BluetoothDevice> device = blueadapter.getBondedDevices();

		userDrivers.clear();
		deviceList.clear();
		adapter.notifyDataSetChanged();
		if (device.size() > 0) { // 存在已经配对过的蓝牙设备
			for (Iterator<BluetoothDevice> it = device.iterator(); it.hasNext();) {
				BluetoothDevice btd = it.next();
				userDrivers.add(new UserDriver(btd, true));
				deviceList.add(btd.getName() + "(已配对)\n" + btd.getAddress());
				adapter.notifyDataSetChanged();
			}
			// 搜索没有配对的设备。

		}
		// else { // 不存在已经配对过的蓝牙设备
		// deviceList.add("No can be matched to use bluetooth");
		// adapter.notifyDataSetChanged();
		// }
	}

	/**
	 * 第三步。查找其他
	 */
	public void FindOthers() {
		// 如果正在搜索,就先取消搜索
		if (blueadapter.isDiscovering()) {
			blueadapter.cancelDiscovery();
		}
		if (isFind)
			return;
		isFind = true;
		findAvalibleDevice();
		// 注册用以接收到已搜索到的蓝牙设备的receiver
		IntentFilter mFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
		registerReceiver(mReceiver, mFilter);
		// 注册搜索完时的receiver
		mFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
		registerReceiver(mReceiver, mFilter);

		setProgressBarIndeterminateVisibility(true);
		setTitle("正在扫描....");
		// 开始搜索蓝牙设备,搜索到的蓝牙设备通过广播返回
		blueadapter.startDiscovery();
	}

	/**
	 * 广播处理
	 **/
	private BroadcastReceiver mReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub

			String action = intent.getAction();
			// 获得已经搜索到的蓝牙设备
			if (action.equals(BluetoothDevice.ACTION_FOUND)) {
				BluetoothDevice device = intent
						.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
				// 搜索到的不是已经绑定的蓝牙设备
				if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
					// 显示在TextView上
					userDrivers.add(new UserDriver(device, false));
					deviceList.add(device.getName() + "(未配对)\n"
							+ device.getAddress());
					adapter.notifyDataSetChanged();
				}
				// 搜索完成
			} else if (action
					.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
				setProgressBarIndeterminateVisibility(false);
				setTitle("扫描结束");
				unReceive();
				isFind = false;
			}
		}

	};

	/**
	 * 关闭注册事件
	 */
	private void unReceive() {
		try {
			// 解除注册
			unregisterReceiver(mReceiver);
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	/**
	 * 配对并且连接设备
	 */
	private void ApadeDevice() {
		try {
			Method createBondMethod = BluetoothDevice.class
					.getMethod("createBond");
			Log.d("BlueToothTestActivity", "开始配对1");
			try {
				createBondMethod
						.invoke(userDrivers.get(useIndex).DeviceAdapter);
				Log.d("BlueToothTestActivity", "开始配对2");
				new Thread(new Runnable() {

					@Override
					public void run() {
						// TODO Auto-generated method stub
						BluetoothDevice bDevice = userDrivers.get(useIndex).DeviceAdapter;
						while (true) {
							try {
								Thread.sleep(1000);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							// 判断配对状态,更新列表信息。
							if (bDevice.getBondState() == BluetoothDevice.BOND_BONDED) {
								Log.d("BlueToothTestActivity", "成功配对");
								userDrivers.get(useIndex).IsConnected = true;
								deviceList.set(useIndex, bDevice.getName()
										+ "(已配对)\n" + bDevice.getAddress());
								Log.d("BlueToothTestActivity", "成功配对2");
								handler2.sendMessage(new Message());
								break;
							}
						}
					}
				}).start();

			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch
				// block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch
				// block
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Auto-generated catch
				// block
				e.printStackTrace();
			}
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch
			// block
			e.printStackTrace();
		}
	}

	@SuppressLint("HandlerLeak")
	Handler handler2 = new Handler() {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			adapter.notifyDataSetChanged();
			LinkDevice();
		}
	};

	private void LinkDevice() {
		pDialog.setMessage("连接中....");
		pDialog.show();
		new Thread(new Runnable() {

			@Override
			public void run() { //
				// TODO Auto-generated //
				// connect(userDrivers.get(useIndex).DeviceAdapter);
				Message msg = new Message();
				Bundle data = new Bundle();

				UUID uuid = UUID.fromString(SPP_UUID);
				try {
					if (btSocket != null && btSocket.isConnected())
						btSocket.close();
					btSocket = userDrivers.get(useIndex).DeviceAdapter
							.createRfcommSocketToServiceRecord(uuid);
					Log.d("BlueToothTestActivity", "开始连接...");
					btSocket.connect();
					if (btSocket.isConnected()) {
						data.putString("Request", "连接成功");
					} else {
						data.putString("Request", "连接失败");
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					data.putString("Request", "发生错误");
				}
				msg.setData(data);
				handler.sendMessage(msg);
			}
		}).start();
	}

	@SuppressLint("HandlerLeak")
	Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			Bundle data = msg.getData();
			String valString = data.getString("Request");
			if (valString.equals("连接成功")) {
				Intent intent = new Intent(MainActivity.this, Connected.class);
				startActivity(intent);
			} else {
				Toast.makeText(getApplicationContext(), valString,
						Toast.LENGTH_SHORT).show(); //
			}
			if (pDialog.isShowing())
				pDialog.cancel();
		}
	};

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK
				&& event.getAction() == KeyEvent.ACTION_DOWN) {
			if ((System.currentTimeMillis() - exitTime) > 2000) {
				Toast.makeText(getApplicationContext(), "再按一次退出程序",
						Toast.LENGTH_SHORT).show();
				exitTime = System.currentTimeMillis();
			} else {
				if (btSocket != null && btSocket.isConnected())
					try {
						btSocket.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				finish();
				System.exit(0);
			}
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		unReceive();
		super.onDestroy();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.item1) {
			// 搜索设备
			FindOthers();
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

界面XML:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.blt.MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>

-------------------------------------------蓝牙的发送和接收!Connected窗体

package com.example.blt;

import java.io.InputStream;
import java.io.OutputStream;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class Connected extends Activity {

	String sendData = "";
	boolean _runThread = true;
	private TextView mResults;

	Thread thread = new Thread(new Runnable() {

		@Override
		public void run() {
			Log.d("BlueToothTestActivity", "启动线程");
			String bufferString = "";
			// TODO Auto-generated method stub
			while (_runThread) {
				if (sendData != "") {
					Log.d("BlueToothTestActivity", "准备数据" + sendData);
					try {
						OutputStream outputStream = MainActivity.btSocket
								.getOutputStream();
						Log.d("BlueToothTestActivity", "获得输出流");
						outputStream.write(sendData.getBytes());
						Log.d("BlueToothTestActivity", "写入输出流");
						bufferString = "send:" + sendData;
						Log.d("BlueToothTestActivity", "已经发送");
					} catch (Exception e) {
						// TODO: handle exception
						Log.d("BlueToothTestActivity", "发送错误");
					}
					sendData = "";
				}
				try {
					InputStream inputStream = MainActivity.btSocket
							.getInputStream();
					int count = inputStream.available();
					if (count > 0) {
						byte[] b = new byte[count];
						inputStream.read(b);

						bufferString = "rece:" + new String(b);
					}
				} catch (Exception e) {
					// TODO: handle exception
				}

				if (bufferString == null || bufferString == "")
					continue;
				Message msg = new Message();
				Bundle data = new Bundle();
				data.putString("Request", bufferString);
				msg.setData(data);
				handler.sendMessage(msg);
				bufferString = "";
			}
		}
	});

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_connected);
		mResults = (TextView) findViewById(R.id.axis_x);
		mResults.setMovementMethod(ScrollingMovementMethod.getInstance());
		mResults.setText("日志信息");
		thread.start();
		((Button) findViewById(R.id.BtnSend))
				.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						Log.d("BlueToothTestActivity", "点击按钮");
						sendData = ((EditText) findViewById(R.id.editText1))
								.getText().toString();
					}
				});
		((EditText) findViewById(R.id.editText1))
				.setOnEditorActionListener(new OnEditorActionListener() {

					@Override
					public boolean onEditorAction(TextView v, int actionId,
							KeyEvent event) {
						// TODO Auto-generated method stub
						Log.d("BlueToothTestActivity", "键盘发送");
						sendData = ((EditText) findViewById(R.id.editText1))
								.getText().toString();
						return false;
					}
				});
	}

	// 通信模块

	@SuppressLint("HandlerLeak")
	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			Bundle data = msg.getData();
			String valString = data.getString("Request");
			mResults.setText(mResults.getText().toString() + "\r\n" + valString);
			/*
			 * Log.d("BlueToothTestActivity", mResults.getScrollX() + "," +
			 * mResults.getScrollY());
			 */
		}
	};

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
			// do something...
			_runThread = false;
			Log.d("BlueToothTestActivity", "返回了");
		}
		return super.onKeyDown(keyCode, event);
	}

	/*
	 * private byte[] getHexBytes(String message) { int len = message.length() /
	 * 2; char[] chars = message.toCharArray(); String[] hexStr = new
	 * String[len]; byte[] bytes = new byte[len]; for (int i = 0, j = 0; j <
	 * len; i += 2, j++) { hexStr[j] = "" + chars[i] + chars[i + 1]; bytes[j] =
	 * (byte) Integer.parseInt(hexStr[j], 16); } return bytes; }
	 */

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.connected, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

--------------------------窗体部分

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.blt.Connected" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/BtnSend"
        android:digits="0123456789.abcdefghigklmnopqrstuvwxyz"
        android:ems="10"
        android:imeOptions="actionSend"
        android:inputType="textPersonName" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/BtnSend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText1"
        android:layout_alignBottom="@+id/editText1"
        android:layout_alignParentRight="true"
        android:text="Send" />

    <TextView
        android:id="@+id/axis_x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/BtnSend"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/BtnSend"
        android:scrollbars="vertical"
        android:text="TextView" />

</RelativeLayout>

UserDriver类******************

package com.example.blt;

import android.bluetooth.BluetoothDevice;

public class UserDriver {

	//设备信息
	public BluetoothDevice DeviceAdapter = null;

	//是否已经配对了
	public boolean IsConnected = false;

	public UserDriver(BluetoothDevice valueDevice, boolean isConnected) {
		this.DeviceAdapter=valueDevice;
		this.IsConnected=isConnected;
	}

}

*************************************************

载入main窗体的时候系统自动侦测是否有蓝牙模块可以使用,当存在的时候,调出已经配对过的设备列表。然后点击菜单里面的扫描。如果扫描到新设备,则加入。

点击设备的时候,如果没有配对的,重新配对,配对过了就跳转到连接界面去。

时间: 2024-10-14 08:22:03

android蓝牙模块的相关文章

Android 蓝牙模块

前天想找个蓝牙录音程序,发现居然没有!没办法,就自己动手DIY了.一些关键代码摘出来,希望对大家有用.    本代码基于android 2.2以上.IOS就不要问我了,不越狱的IOS设备,蓝牙除了用蓝牙耳机,再就是IOS设备之间联机游戏,不可理喻! 一.初始化添加权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:

Android 蓝牙模块基础操作

之前没怎么接触过蓝牙模块,在学习的过程中借鉴了很多前辈的经验.本次主要包含以下功能: 1.检测是否存在蓝牙模块 2.蓝牙的开启与关闭 3.与本机已配对的蓝牙设备 4.本机蓝牙可见性设置 5.扫描周围蓝牙设备 关于蓝牙设备之间如何通讯下次再整理.下面开始介绍. 1.1.首先要在配置文件中加入操作蓝牙的权限 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission and

Android蓝牙实例(和单片机蓝牙模块通信)

最近做毕设,需要写一个简单的蓝牙APP进行交互,在网上也找了很多资料,终于给搞定了,这里分享一下^_^. 1.Android蓝牙编程 蓝牙3.0及以下版本编程需要使用UUID,UUID是通用唯一识别码(Universally Unique Identifier),这是一个软件构建的标准,也是被开源基金会组织应用在分布式计算环境领域的一部分.在蓝牙3.0及下一版本中,UUID被用于唯一标识一个服务,比如文件传输服务,串口服务.打印机服务等,如下: #蓝牙串口服务 SerialPortService

【转】android蓝牙开发---与蓝牙模块进行通信--不错

原文网址:http://www.cnblogs.com/wenjiang/p/3200138.html 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利,但因为蓝牙模块不在我这里,所以只能用手机测试.一开头就发现手机的蓝牙不能用,为了证明这点,我刷了四次不同不同系统的官方包,正式宣布手机的蓝牙报销了,于是和朋友换手机.在测试的过程中也是非常痛苦,放假了,同学都几乎回家了,剩下的同学中竟然80%都是用非android手机!我和我的小伙伴都吓呆了!!就算

Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!!一.Android Bluetooth Architecture蓝牙代码架构部分(google 官方蓝牙框架) Android的蓝牙系统,自下而上包括以下一些

Android Bluetooth模块学习笔记

一.蓝牙基础知识 1.蓝牙( Bluetooth )是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换.蓝牙基于设备低成本的收发器芯片,传输距离近.低功耗. 2.微波频段:使用2.402GGHz到2.480GHz(包括防护频带)的ISM波段的UHF无线电波 3.蓝牙使用跳频技术,将传输的数据分割成数据包,通过79个指定的蓝牙频道分别传输数据包.每个频道的频宽为1MHz. 4.蓝牙是基于数据包.有着主从架构的协议.一个主设备至多可和同一微微网中的七个从设备通讯.所有设备

Android蓝牙开发深入解析

1. 使用蓝牙的响应权限 代码如下: <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 2. 配置本机蓝牙模块 在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter 代码如下: BluetoothAdapter

Arduino蓝牙模块实现通信

蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口 3.输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V! 4.可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接 5.在未建立蓝牙连接时支持通过AT指令设置波特率.名称.配对密码,

[Android]蓝牙系统

1.1 蓝牙技术简介 蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其"统一"的含义,用来意在统一无线局域网通讯的标准的蓝牙技术.蓝牙技 术是爱立信,IBM,Intel等世界5家著名大公司在1998年联合推出的一项无线通讯规范.随后成立的蓝牙技术特殊兴趣组织(SIG)来负责该技术的 开发和技术协议的制定,如今全世界已有1800多家公司加盟该组织,最近微软公司也正式加盟并成为SIG组织的领导成员之一.它以低成本的近距离无线连接 为基础,为移动通信设备建立一个短程无