- 浏览: 532561 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
工程结构图:
[img]
[/img]
MainActivity
BTConnectActivity
WriteActivity
记得添加权限:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
[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" />
发表评论
-
Android中如何模拟一次点击(touch)事件
2014-05-06 10:41 0在Android中有时需要模拟某一个View的touch事件, ... -
Android程序Crash时的异常上报
2014-04-28 18:15 0http://blog.csdn.net/singwhatiw ... -
android程序中证书签名校验的方法
2014-04-28 17:58 2004android程序中证书签名校验的方法一 2013-02 ... -
MD5理解错了,哎
2014-03-17 14:14 0MD5只对数据加密是无法解密的,也就是说,你把100加密后,就 ... -
Android 获取网络时间
2014-03-12 11:42 2042Android 获取网络时间 在网上看到的最常见的方式有: ... -
SQLite清空表并将自增列归零
2014-03-05 18:02 1550SQLite清空表并将自增列归零 作者:Zhu Yanfeng ... -
Handler小看一下
2013-11-11 16:42 0android handler调用post方法还是阻塞 su ... -
Frame Animation小看一下
2013-10-12 16:30 781Demo运行效果图: 源码: -
动画小学一下
2013-10-12 16:14 736转自: http://www.eoeandroid.com/f ... -
Android 动画之ScaleAnimation应用详解
2013-10-12 15:49 1004===============eoeAndroid社区推荐:= ... -
android开发中的一个工具类
2013-06-19 16:04 0package com.wanpu.login.dialog; ... -
android TextView怎么设置个别字体颜色并换行?
2013-06-20 09:25 1683(1)、TextView 设置个别字体颜色 TextView ... -
Android开发之文件下载,状态时显示下载进度,点击自动安装
2013-05-07 15:38 1430在进行软件升级时,需要进行文件下载,在这里实现自定义的文件下载 ... -
android中的状态保存
2013-04-07 14:21 978package com.zzl.call; import ... -
android动画基础:tween动画
2013-04-06 11:21 1239工程结构图: [img] [/img] 四个动画的xml ... -
面试中遇到的几个问题
2013-06-09 11:56 990SAX与DOM之间的区别 SAX ( ... -
Android获取其他包的Context实例,然后调用它的方法,反射!!!
2013-03-25 10:32 1222Android中有Context的概念,想必大家都知道。Con ... -
Android的内存机制和常见泄漏情形
2013-03-06 16:55 794一、 Android的内存机制 Android的程序由Ja ... -
JUnit测试小小demo
2013-03-06 16:37 1158运行效果图: [img] [/img] 项目结构图 ... -
android开发中的异常小工具
2013-03-04 15:53 899package com.zzl.tools; impor ...
相关推荐
"BluetoothDemo"很可能是一个蓝牙使用示例程序,可能包含了一些演示如何使用蓝牙进行数据传输、设备配对和命令发送的代码或教程。对于开发者来说,这是一个很好的学习资源,可以帮助理解蓝牙API的用法,以及如何在...
五、蓝牙使用指南 1. 启动蓝牙:在设备的设置菜单中找到蓝牙选项并开启。 2. 搜索设备:打开蓝牙后,设备会自动搜索周围的蓝牙设备。 3. 配对设备:找到目标设备,点击配对,根据提示完成操作。 4. 连接设备:配对...
本“ios 蓝牙使用demo”是一个示例项目,旨在帮助开发者了解如何在iOS应用中集成蓝牙功能。以下是一些关于iOS蓝牙开发的关键知识点: 1. **Core Bluetooth框架**:这是苹果为iOS设备提供的原生框架,用于处理蓝牙低...
### 黑莓8830蓝牙使用教程 #### 一、引言 随着移动通信技术的发展,蓝牙技术作为一项无线连接标准,在智能手机和平板电脑等移动设备中的应用日益广泛。黑莓8830作为一款经典的商务手机,其蓝牙功能为用户提供了...
【经典蓝牙使用文档1】 在Android平台上,蓝牙技术的使用涉及一系列API,允许开发者执行诸如搜索设备、连接、建立通道以及交换数据等操作。本文档将详细解释如何在Android应用程序中实现经典蓝牙功能。 首先,集成...
我的练习,uniapp小程序蓝牙使用
对如何调用android系统的蓝牙并获取蓝牙MAC地址及蓝牙名称等信息给出了方法。
以下是对Android蓝牙使用方法的详细解析。 1. **开启与关闭蓝牙** Android设备可以通过编程方式开启或关闭蓝牙功能。首先,你需要在AndroidManifest.xml文件中添加蓝牙权限: ```xml ``` 接着,通过...
蓝牙打印机使用的协议SPP,全称为串行端口协议(Serial Port Profile),是蓝牙技术联盟(Bluetooth Special Interest Group, SIG)定义的一种通用通信协议。SPP协议旨在模拟传统的RS-232串行通信,使得蓝牙设备之间...
在本文中,我们将深入探讨如何使用uni-app框架开发一个具备自动开启蓝牙功能的跨平台APP。...不过,请注意在实际开发中,还需遵循各个平台的蓝牙使用规范,以及处理好用户的隐私权限,确保应用的合规性和安全性。
在Android系统中,我们可以使用BluetoothAdapter和BluetoothProfile接口来实现与支持PBAP的蓝牙设备的连接。 为了在Android应用中实现PBAP通信,我们需要以下关键组件: 1. **android_pbap.zip**:这个压缩包可能...
在Android平台上,蓝牙技术是一种广泛使用的短距离无线通信方式,特别是在设备间的数据交换和物联网(IoT)应用中。本文将深入探讨如何在Android 5.0及以上版本中开发蓝牙功能,包括解决常见问题、UUID的使用、蓝牙...
4. **蓝牙开发**:对于开发者来说,资料可能包含SDK、API文档、示例代码和调试工具的使用方法,帮助开发者快速上手蓝牙设备的软件开发。 5. **硬件接口**:龙邱(LQ)品牌的蓝牙模块可能有自己的硬件接口规范,如I2...
ios蓝牙DFU升级 ios 蓝牙DFU升级 快速开发
本文将深入探讨如何使用Android的Bluetooth API来实现蓝牙搜索、配对、连接以及传输数据。 首先,我们要了解Android Bluetooth API的基础概念。在Android系统中,BluetoothManager类是蓝牙功能的主要入口,它提供了...
在使用蓝牙调试软件时,用户首先需要通过软件扫描并发现周围的蓝牙设备。这些设备可以是手机、电脑、智能穿戴设备或各种物联网设备。一旦找到目标设备,软件会显示设备的名称、MAC地址和信号强度等信息,然后用户...
蓝牙使用2.4GHz ISM频段,并通过跳频技术来避免干扰,支持2Mbps的数据传输速率。 2. 链路层(Link Layer, LL):这一层负责管理蓝牙设备间的无线链路,包括连接建立、数据传输和链路管理。其中,低功耗蓝牙(BLE,...
本应用参考google官方的蓝牙使用方法,实现了在安卓手机上,控制蓝牙的功能。 本程序实现了开关蓝牙设备,显示已配对的蓝牙设备,以及搜索附近的蓝牙设备等基本功能,并已做多语言适配工作,并可以参考添加其他语言...
此外,蓝牙设备的功耗也是需要考虑的因素,尤其是对于移动设备,优化蓝牙使用可以延长电池寿命。 总的来说,Android 提供的 Bluetooth APIs 允许开发者构建功能丰富的蓝牙应用,实现设备间的无线通信,包括文件传输...
1. **物理层**:蓝牙使用2.4GHz的ISM频段,通过频率分跳变(Frequency Hopping Spread Spectrum, FHSS)技术,将通信信号分散到79个不同的频道,以减少干扰并提高抗干扰能力。每个频道的带宽为1MHz。 2. **链路层**...