`

蓝牙的使用

阅读更多
工程结构图:
[img]

[/img]

MainActivity
package com.zzl.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn = (Button) findViewById(R.id.button1);
        
        btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(getApplication(),BTConnectActivity.class);
				startActivity(intent);
				finish();
			}
		});
    }
}


BTConnectActivity
package com.zzl.test;

/*************************************************************/
/* Project Shmimn 
 *  Mobile Health-care Device
 *  Yuhua Chen
 *  2011-4-24 16:35:21
 */
/*************************************************************/
import java.io.IOException;
import java.util.UUID;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.Context;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;

import android.widget.AdapterView;

import android.widget.ListView;
import android.widget.ArrayAdapter;

import android.widget.Toast;
import android.util.Log;
import android.view.View;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
public class BTConnectActivity extends Activity {

	// private static final String TAG = "BTConnectActivity";

	/** Called when the activity is first created. */
	public static final int REQUEST_ENABLE_BT = 8807;
	public BroadcastReceiver mBTReceiver;
	public static BluetoothSocket mBTSocket;
	public BluetoothAdapter mBTAdapter;
	public BluetoothDevice mBTDevice;
	private ArrayAdapter<String> adtDvcs;
	private List<String> lstDvcsStr = new ArrayList<String>();
	private ListView lvDevicesList;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.btconnect);


		// 初始化 BluetoothAdapter
		mBTAdapter = BluetoothAdapter.getDefaultAdapter(); // c

		if (mBTAdapter == null) {
			Toast.makeText(BTConnectActivity.this, "没有支持蓝牙的设备! ",
					Toast.LENGTH_SHORT).show();
			this.finish();
		}
		if (!mBTAdapter.isEnabled()) {
			// Open a new dialog to ask user whether wanna open BT
			Toast.makeText(BTConnectActivity.this, "请打开手机蓝牙后再重试! ",
					Toast.LENGTH_SHORT).show();
			this.finish();

			Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
			startActivityForResult(enabler, REQUEST_ENABLE_BT);
		}
		// 开启 BroadCast Receiver
		mBTReceiver = new BroadcastReceiver() {
			public void onReceive(Context context, Intent intent) {
				String act = intent.getAction();
				// To see whether the action is that already found devices
				if (act.equals(BluetoothDevice.ACTION_FOUND)) {
					// 如果发现一个设备,得到设备的对象


					BluetoothDevice tmpDvc = intent
							.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
					// Put the name & address into a string
					String tmpDvcStr = tmpDvc.getName() + "|"
							+ tmpDvc.getAddress();
					if (lstDvcsStr.indexOf(tmpDvcStr) == -1) {
						// Avoid duplicate add devices
						lstDvcsStr.add(tmpDvcStr);
						adtDvcs.notifyDataSetChanged();
						Toast.makeText(BTConnectActivity.this, "发现一个新设备",
								Toast.LENGTH_SHORT).show();
					}
				}
				if (act.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
					Toast.makeText(BTConnectActivity.this, "搜索完成!",
							Toast.LENGTH_SHORT).show();
				}

				if (act.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {
					Toast.makeText(BTConnectActivity.this, "开始搜索设备",
							Toast.LENGTH_SHORT).show();
				}
			}
		};

		// 注册 broadcastReceiver
		IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
		registerReceiver(mBTReceiver, filter);
		filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
		registerReceiver(mBTReceiver, filter);
		filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
		registerReceiver(mBTReceiver, filter);

		lvDevicesList = (ListView) findViewById(R.id.lvDevicesList);

		adtDvcs = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, lstDvcsStr);
		lvDevicesList.setAdapter(adtDvcs);

		if (mBTAdapter.isDiscovering()) {
			Toast.makeText(BTConnectActivity.this, "正在搜索......",
					Toast.LENGTH_SHORT).show();
		} else {
			lstDvcsStr.clear();
			adtDvcs.notifyDataSetChanged();
			mBTDevice = null;
			mBTAdapter.startDiscovery();
		}

		// 在设备列表中创建单击事件
		lvDevicesList
				.setOnItemClickListener(new AdapterView.OnItemClickListener() {
					public void onItemClick(AdapterView<?> arg0, View arg1,
							int arg2, long arg3) {
						if (mBTAdapter == null)
							Toast.makeText(BTConnectActivity.this, "没有搜索到蓝牙设备",
									Toast.LENGTH_SHORT).show();
						else {
							// 停止搜索
							mBTAdapter.cancelDiscovery();
							// 得到设备的地址
							String str = lstDvcsStr.get(arg2);
							String[] dvcValues = str.split("\\|");
							String dvcAddr = dvcValues[1];
							UUID dvcUUID = UUID
									.fromString("00001101-0000-1000-8000-00805F9B34FB");
							mBTDevice = mBTAdapter.getRemoteDevice(dvcAddr);
							// 连接设备
							try {
								// 根据UUID创建并返回一个BluetoothSocket
								mBTSocket = mBTDevice
										.createRfcommSocketToServiceRecord(dvcUUID);
								mBTSocket.connect();

								Intent intent = new Intent(getApplicationContext(),WriteActivity.class);
								startActivity(intent);
								
								
							} catch (IOException e) {
								e.printStackTrace();
							}
						}
					}
				});
	}

	public void onActivityResult(int RequestCode, int ResultCode, Intent data) {
		Log.i("BTConnectActivity", "RequestCode is " + RequestCode
				+ ", ResultCode is " + ResultCode);
		switch (RequestCode) {
		case REQUEST_ENABLE_BT:
			if (ResultCode == RESULT_OK) {
				Toast.makeText(this.getApplicationContext(), "蓝牙已连接!",
						Toast.LENGTH_SHORT).show();
			} else if (ResultCode == RESULT_CANCELED) {
				Toast.makeText(this.getApplicationContext(), "蓝牙连接被取消!",
						Toast.LENGTH_SHORT).show();
			}
			break;
		}
	}

	@Override
	protected void onDestroy() {
		try {
			mBTSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.unregisterReceiver(mBTReceiver);
		super.onDestroy();
	}
}






WriteActivity
package com.zzl.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class WriteActivity extends Activity {
    
	
	private TextView tv;
	private BTReadThread mReadThread = new BTReadThread(50);
	private boolean enRead = false; 
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {

			switch (msg.what) {
			case 0:
				tv.setText(msg.obj.toString());
				break;
			}
		}
	};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.write);
        tv = (TextView) findViewById(R.id.tv);
        btint();
        
    }
    
    
    /**
	 * 开启读取蓝牙数据的线程
	 */
	private void btint() {
		try {
			if (BTConnectActivity.mBTSocket.getInputStream() != null) {
				enRead = true;
				mReadThread.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	/***
	 * 蓝牙操作
	 */
	class BTReadThread extends Thread {
		private int wait = 50;// Time to wait

		public BTReadThread(int wait) {
			this.wait = wait;
		}
		
		public void stopThread(){
			enRead = false;
		}

		public void run() {
			while (enRead) {
				try {
					if (BTConnectActivity.mBTSocket.getInputStream() != null) {
						byte[] tmp = new byte[1024];
						int len = BTConnectActivity.mBTSocket.getInputStream().read(tmp, 0, 1024); // 卡

						if (len > 0) {

							String res = "";
							for (int i = 0; i < tmp.length; i++) {
								String hex = Integer.toHexString(tmp[i] & 0xFF);
								if (hex.length() == 1) {
									hex = '0' + hex;
								}
								res += hex.toUpperCase();
							}

							String strDES = res.substring(0, 16);
							
							Message message = handler.obtainMessage();
							message.what = 0;
							message.obj = strDES;
							handler.sendMessage(message);
						}
					}
					Thread.sleep(wait);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}


记得添加权限:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
  • 大小: 33.4 KB
分享到:
评论

相关推荐

    最简单的蓝牙使用

    "BluetoothDemo"很可能是一个蓝牙使用示例程序,可能包含了一些演示如何使用蓝牙进行数据传输、设备配对和命令发送的代码或教程。对于开发者来说,这是一个很好的学习资源,可以帮助理解蓝牙API的用法,以及如何在...

    蓝牙使用说明,包括用户指南

    五、蓝牙使用指南 1. 启动蓝牙:在设备的设置菜单中找到蓝牙选项并开启。 2. 搜索设备:打开蓝牙后,设备会自动搜索周围的蓝牙设备。 3. 配对设备:找到目标设备,点击配对,根据提示完成操作。 4. 连接设备:配对...

    ios 蓝牙使用demo

    本“ios 蓝牙使用demo”是一个示例项目,旨在帮助开发者了解如何在iOS应用中集成蓝牙功能。以下是一些关于iOS蓝牙开发的关键知识点: 1. **Core Bluetooth框架**:这是苹果为iOS设备提供的原生框架,用于处理蓝牙低...

    8830黑莓蓝牙使用教程

    ### 黑莓8830蓝牙使用教程 #### 一、引言 随着移动通信技术的发展,蓝牙技术作为一项无线连接标准,在智能手机和平板电脑等移动设备中的应用日益广泛。黑莓8830作为一款经典的商务手机,其蓝牙功能为用户提供了...

    经典蓝牙使用文档1

    【经典蓝牙使用文档1】 在Android平台上,蓝牙技术的使用涉及一系列API,允许开发者执行诸如搜索设备、连接、建立通道以及交换数据等操作。本文档将详细解释如何在Android应用程序中实现经典蓝牙功能。 首先,集成...

    我的练习,uniapp小程序蓝牙使用

    我的练习,uniapp小程序蓝牙使用

    android 蓝牙使用demo

    对如何调用android系统的蓝牙并获取蓝牙MAC地址及蓝牙名称等信息给出了方法。

    android 蓝牙使用

    以下是对Android蓝牙使用方法的详细解析。 1. **开启与关闭蓝牙** Android设备可以通过编程方式开启或关闭蓝牙功能。首先,你需要在AndroidManifest.xml文件中添加蓝牙权限: ```xml ``` 接着,通过...

    蓝牙打印机使用的协议 SPP

    蓝牙打印机使用的协议SPP,全称为串行端口协议(Serial Port Profile),是蓝牙技术联盟(Bluetooth Special Interest Group, SIG)定义的一种通用通信协议。SPP协议旨在模拟传统的RS-232串行通信,使得蓝牙设备之间...

    APP蓝牙Demo.zip_settinglyb_uniapp 开发app_蓝牙_蓝牙 uni_跨平台蓝牙demo

    在本文中,我们将深入探讨如何使用uni-app框架开发一个具备自动开启蓝牙功能的跨平台APP。...不过,请注意在实际开发中,还需遵循各个平台的蓝牙使用规范,以及处理好用户的隐私权限,确保应用的合规性和安全性。

    Android通过蓝牙使用Pbap协议读取通讯录

    在Android系统中,我们可以使用BluetoothAdapter和BluetoothProfile接口来实现与支持PBAP的蓝牙设备的连接。 为了在Android应用中实现PBAP通信,我们需要以下关键组件: 1. **android_pbap.zip**:这个压缩包可能...

    Android 蓝牙使用 示例

    在Android平台上,蓝牙技术是一种广泛使用的短距离无线通信方式,特别是在设备间的数据交换和物联网(IoT)应用中。本文将深入探讨如何在Android 5.0及以上版本中开发蓝牙功能,包括解决常见问题、UUID的使用、蓝牙...

    龙邱蓝牙配套资料(全)

    4. **蓝牙开发**:对于开发者来说,资料可能包含SDK、API文档、示例代码和调试工具的使用方法,帮助开发者快速上手蓝牙设备的软件开发。 5. **硬件接口**:龙邱(LQ)品牌的蓝牙模块可能有自己的硬件接口规范,如I2...

    ios蓝牙DFU 升级

    ios蓝牙DFU升级 ios 蓝牙DFU升级 快速开发

    android BlueToothDemo (蓝牙搜索,配对,连接,传输)详细讲解见博客

    本文将深入探讨如何使用Android的Bluetooth API来实现蓝牙搜索、配对、连接以及传输数据。 首先,我们要了解Android Bluetooth API的基础概念。在Android系统中,BluetoothManager类是蓝牙功能的主要入口,它提供了...

    蓝牙调试软件

    在使用蓝牙调试软件时,用户首先需要通过软件扫描并发现周围的蓝牙设备。这些设备可以是手机、电脑、智能穿戴设备或各种物联网设备。一旦找到目标设备,软件会显示设备的名称、MAC地址和信号强度等信息,然后用户...

    蓝牙协议详解(很适合初学者)

    蓝牙使用2.4GHz ISM频段,并通过跳频技术来避免干扰,支持2Mbps的数据传输速率。 2. 链路层(Link Layer, LL):这一层负责管理蓝牙设备间的无线链路,包括连接建立、数据传输和链路管理。其中,低功耗蓝牙(BLE,...

    安卓平台蓝牙开发初级源码

    本应用参考google官方的蓝牙使用方法,实现了在安卓手机上,控制蓝牙的功能。 本程序实现了开关蓝牙设备,显示已配对的蓝牙设备,以及搜索附近的蓝牙设备等基本功能,并已做多语言适配工作,并可以参考添加其他语言...

    Android中如何使用蓝牙设备—翻译官方

    此外,蓝牙设备的功耗也是需要考虑的因素,尤其是对于移动设备,优化蓝牙使用可以延长电池寿命。 总的来说,Android 提供的 Bluetooth APIs 允许开发者构建功能丰富的蓝牙应用,实现设备间的无线通信,包括文件传输...

    蓝牙协议中文详解

    1. **物理层**:蓝牙使用2.4GHz的ISM频段,通过频率分跳变(Frequency Hopping Spread Spectrum, FHSS)技术,将通信信号分散到79个不同的频道,以减少干扰并提高抗干扰能力。每个频道的带宽为1MHz。 2. **链路层**...

Global site tag (gtag.js) - Google Analytics